我想在excel文件中对工作表进行排序。我找到了this代码。但问题是我的工作表名称是1_abc,2_adf,3_dasf,11_ad等。此代码将11_ad放在2_adf和3_dasf之前。我想在#34; _"之前根据数字对表格进行排序。 (第一个下划线)在我的工作表名称中。我怎么能这样做?
################################ 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
答案 0 :(得分:6)
而不是:
If UCase(Worksheets(N).Name) > UCase(Worksheets(M).Name) Then
你需要这样的东西:
If CLng(Split(Worksheets(N).Name,"_")(0)) > _
CLng(Split(Worksheets(M).Name,"_")(0)) Then
答案 1 :(得分:-1)
经过长期研究,我发现这是唯一可行的解决方案:
Sub WorksheetsSortAscending()
'http://www.erlandsendata.no/english/vba/wb/sortsheets.htm
' sort worksheets in a workbook in ascending order
Dim sCount As Integer, i As Integer, j As Integer
sCount = Worksheets.Count
If sCount = 1 Then Exit Sub
For i = 1 To sCount - 1
For j = i + 1 To sCount
If Val(Worksheets(j).Name) < Val(Worksheets(i).Name) Then
Worksheets(j).Move before:=Worksheets(i)
End If
Next j
Next i
End Sub
我的升级版本(屏幕更新+在调用该子程序的末尾重新激活工作表):
Sub WorksheetsSortAscending()
Dim currentWorksheet As Worksheet
Set currentWorksheet = ActiveSheet
Application.ScreenUpdating = False
'http://www.erlandsendata.no/english/vba/wb/sortsheets.htm
' sort worksheets in a workbook in ascending order
Dim sCount As Integer, i As Integer, j As Integer
sCount = Worksheets.Count
If sCount = 1 Then Exit Sub
For i = 1 To sCount - 1
For j = i + 1 To sCount
If Val(Worksheets(j).Name) < Val(Worksheets(i).Name) Then
Worksheets(j).Move before:=Worksheets(i)
End If
Next j
Next i
currentWorksheet.Activate
Application.ScreenUpdating = True
End Sub