excel vba排序表数字

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)

Tim*_*ams 6

而不是这个:

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)