use*_*622 1 excel vba excel-vba
我想在excel文件中对工作表进行排序.我发现这个代码有效.但问题是我的工作表名称是1_abc,2_adf,3_dasf,11_ad等.此代码将11_ad放在2_adf和3_dasf之前.我想在我的工作表名称"_"(第一个下划线)之前根据数字对工作表进行排序.我怎么能这样做?
################################ UPDATE1我修改了如下代码.但它按降序排序:(.我想按升序排序
Option Explicit
Sub SortWorksheets()
Dim N As Integer
Dim M As Integer
Dim FirstWSToSort As Integer
Dim LastWSToSort As Integer
Dim SortDescending As Boolean
SortDescending = False
If ActiveWindow.SelectedSheets.Count = 1 Then
'Change the 1 to the worksheet you want sorted first
FirstWSToSort = 1
LastWSToSort = Worksheets.Count
Else
With ActiveWindow.SelectedSheets
For N = 2 To .Count
If .Item(N - 1).Index <> .Item(N).Index - 1 Then
MsgBox "You cannot sort non-adjacent sheets"
Exit Sub
End If
Next N
FirstWSToSort = .Item(1).Index
LastWSToSort = .Item(.Count).Index
End With
End If
For M = FirstWSToSort To LastWSToSort
For N = M To LastWSToSort
If SortDescending = True Then
If CLng(Split(Worksheets(N).Name, "_")(0)) > _
CLng(Split(Worksheets(M).Name, "_")(0)) Then
Worksheets(N).Move Before:=Worksheets(M)
End If
Else
If CLng(Split(Worksheets(N).Name, "_")(0)) > _
CLng(Split(Worksheets(M).Name, "_")(0)) Then
Worksheets(N).Move Before:=Worksheets(M)
End If
End If
Next N
Next M
End Sub
Run Code Online (Sandbox Code Playgroud)
而不是这个:
If UCase(Worksheets(N).Name) > UCase(Worksheets(M).Name) Then
Run Code Online (Sandbox Code Playgroud)
你需要这样的东西:
If CLng(Split(Worksheets(N).Name,"_")(0)) > _
CLng(Split(Worksheets(M).Name,"_")(0)) Then
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
756 次 |
| 最近记录: |