如何为可在任何工作簿中使用的排序编写代码?

问题描述 投票:0回答:1
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

这是我录制的用于为我排序数据的宏。每周要向活动工作表更改名称。如何将其放置在任何工作表上?

excel vba
1个回答
0
投票

排序是一种可以通过工作表对象访问的方法。但是,您可以选择引用工作表对象,具体取决于您。

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

ActiveWorkbook.Worksheets("timesheet_report_2019-12-08_thr").Sort...

注意,名称用引号引起来,因此是字符串。您可以创建一个字符串变量。以下代码与上面的工作相同。

Dim worksheetName as String
worksheetName = "timesheet_report_2019-12-08_thr"
ActiveWorkbook.Worksheets(worksheetName).Sort...

但是您也可以使用数字索引。这将对工作簿认为是集合中第一的工作表进行排序。 (这可能会引起误解,因此请谨慎行事。集合中的第一张工作表并不总是最左边的标签,甚至也不是名为“ Sheet1”的工作表。)

ActiveWorkbook.Worksheets(1).Sort...

您还可以使用某些关键字来引用工作表。一些评论者建议使用ActiveSheet。可行,因为它引用了工作表对象。

ActiveWorkbook.ActiveSheet.Sort...

而且,您可以从迭代器中获取引用,就像在“ for each”循环中一样。以下代码(带有排序功能)将对您在工作簿的每个工作表上设计的排序进行运行。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.