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