【问题标题】:Sort All Worksheets in Workbook对工作簿中的所有工作表进行排序
【发布时间】:2014-09-04 18:21:16
【问题描述】:

我正在尝试对我的工作簿中的所有工作表进行排序,但以下代码一直给我一个错误。任何和所有的帮助将不胜感激。

Dim i As Worksheet

For Each i In ThisWorkbook.Sheets
    Worksheets(i).Columns("A").Select
    Selection.Sort key1:=Range("A1"), order1:=xlAscending, Header:=xlYes
Next

End Sub

【问题讨论】:

  • 当我已经是一个工作表时,你为什么要做 Worksheets(i)?我从来没有在 .NET 中使用过 Excel,如果这是一个完全错误的问题,请原谅我。

标签: vba sorting loops select worksheet


【解决方案1】:
  1. 您没有使用 i 作为索引,因此“Worksheets(i)”实际上是“Worksheets(Worksheet)”,这会导致错误。只需使用“我”
  2. Range("A1") 没有链接到工作表对象,应该是 i.Range("A1")

为了提高效率,不要使用 select(不需要排序)。以下代码应该可以工作:

Sub aaa()
    Dim i As Worksheet
    Dim r As Range

    For Each i In ThisWorkbook.Sheets
        Set r = i.Range("A:A")
        r.Sort key1:=i.Range("A1"), order1:=xlAscending, Header:=xlYes
    Next
End Sub

【讨论】:

    【解决方案2】:

    比这多一点,但是我在互联网上看到的如果你想按字母顺序排序,请执行以下操作:

    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
        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 UCase(Worksheets(N).Name) > UCase(Worksheets(M).Name) Then
                    Worksheets(N).Move before:=Worksheets(M)
                End If
            Else
                If UCase(Worksheets(N).Name) < UCase(Worksheets(M).Name) Then
                   Worksheets(N).Move before:=Worksheets(M)
                End If
            End If
         Next N
    Next M
    
    End Sub
    

    如果要降序排序,请将 SortDescending 更改为 true。

    您可以通过更改FirstWSToSortLastWSToSort 轻松更改开始/结束工作簿。

    【讨论】:

      猜你喜欢
      • 2011-06-04
      • 2015-01-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多