Excel 如何为任何工作簿中的排序编写代码?

Excel 如何为任何工作簿中的排序编写代码?,excel,vba,Excel,Vba,这是我录制的一个宏,用于对数据进行排序。每周更改活动工作表的名称。如何使其在任何工作表上工作?排序是一种可通过工作表对象访问的方法。如何选择引用工作表对象取决于您 excel在宏记录器中为您转录的方法使用工作表的名称作为索引 Sub test() ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort.SortFields. _ Clear ActiveWorkbook.Worksheets("timesheet

这是我录制的一个宏,用于对数据进行排序。每周更改活动工作表的名称。如何使其在任何工作表上工作?

排序是一种可通过工作表对象访问的方法。如何选择引用工作表对象取决于您

excel在宏记录器中为您转录的方法使用工作表的名称作为索引

Sub test()
ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort.SortFields. _
    Clear
ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort.SortFields. _
    Add2 Key:=Range("E2:E62"), SortOn:=xlSortOnValues, Order:=xlAscending, _
    DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort.SortFields. _
    Add2 Key:=Range("B2:B62"), SortOn:=xlSortOnValues, Order:=xlAscending, _
    DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort.SortFields. _
    Add2 Key:=Range("A2:A62"), SortOn:=xlSortOnValues, Order:=xlAscending, _
    DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort
    .SetRange Range("A1:I62")
    .Header = xlYes
    .MatchCase = False
    .Orientation = xlTopToBottom
    .SortMethod = xlPinYin
    .Apply
End With
End Sub
请注意,名称在引号中,因此是一个字符串。您可以创建一个字符串变量。下面的代码执行与上面相同的工作

ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort...
但也可以使用数字索引。这将对工作簿认为是集合中第一个的任何工作表进行排序。(这可能有点误导,所以这样做要小心。集合中的第一张表并不总是最左边的选项卡,甚至不是名为“Sheet1”的表)

也可以使用某些关键字引用工作表。一些评论人士建议使用ActiveSheet。这是可行的,因为它引用了一个工作表对象

ActiveWorkbook.Worksheets(1).Sort...
而且,您可以从迭代器中获取引用,就像在“for-each”循环中一样。以下代码(包括排序)将在工作簿中的每个工作表上运行您设计的排序

ActiveWorkbook.ActiveSheet.Sort...

因此,有很多方法可以“在任何工作簿中”运行排序。希望有帮助。

使用
ActiveSheet
。我很确定您可以使用:
ActiveWorkbook.ActiveSheet…
ActiveWorkbook.ActiveSheet.Sort...
Sub SortAllSheets()

    For Each s In ActiveWorkbook.Sheets

        With s.Sort
            .SortFields.Clear
            .SortFields.Add2 Key:=s.Range("E2:E62"), Order:=xlAscending
            .SortFields.Add2 Key:=s.Range("B2:B62"), Order:=xlAscending
            .SortFields.Add2 Key:=s.Range("A2:A62"), Order:=xlAscending
            .SetRange s.Range("A1:I62")
            .Header = xlYes
            .MatchCase = False
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            .Apply
        End With

    Next s

End Sub