我录制了一个宏来按数字排序我的Excel工作表(这是A列),然后是ID(D列),然后是最新的日期(M列)
我希望能够将这个宏复制到任何工作表(它具有所有相同的列),但它告诉我“下标超出范围”,因为有不同的名称。
这是宏。工作表名称是“owssvr(1)”,但我希望它能够用于任何具有相同列的工作表等:
ActiveWorkbook.Worksheets("owssvr (1)").ListObjects("Table_owssvr__2").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("owssvr (1)").ListObjects("Table_owssvr__2").Sort. _
SortFields.Add Key:=Range("Table_owssvr__2[Number]"), SortOn:=xlSortOnValues _
, Order:=xlAscending, DataOption:=xlSortNormal
ActiveWorkbook.Worksheets("owssvr (1)").ListObjects("Table_owssvr__2").Sort. _
SortFields.Add Key:=Range("Table_owssvr__2[ID]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
ActiveWorkbook.Worksheets("owssvr (1)").ListObjects("Table_owssvr__2").Sort. _
SortFields.Add Key:=Range("Table_owssvr__2[Date]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("owssvr (1)").ListObjects("Table_owssvr__2"). _
Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
我正在考虑使用带有
的东西答案 0 :(得分:0)
按索引编号
引用您的工作表名称Option Explicit
Public Sub Example()
ActiveWorkbook.Worksheets(1)
End Sub
Referring to Sheets by Index Number [Excel 2003 VBA Language Reference]
索引号是基于其相同类型的纸张中的纸张标签(从左数起)的位置分配给纸张的顺序号。以下过程使用Worksheets属性激活活动工作簿中的工作表一。
答案 1 :(得分:0)
这里有两个的问题:
让我们假设在要使用宏的所有工作表上,表的名称是相同的。首先激活工作表,然后运行:
Sub Macro1()
'
' Macro1 Macro
'
Dim ws As Worksheet
Set ws = ActiveSheet
ws.ListObjects("Table_owssvr__2").Sort. _
SortFields.Clear
ws.ListObjects("Table_owssvr__2").Sort. _
SortFields.Add Key:=Range("Table_owssvr__2[Number]"), SortOn:=xlSortOnValues _
, Order:=xlAscending, DataOption:=xlSortNormal
ws.ListObjects("Table_owssvr__2").Sort. _
SortFields.Add Key:=Range("Table_owssvr__2[ID]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortTextAsNumbers
ws.ListObjects("Table_owssvr__2").Sort. _
SortFields.Add Key:=Range("Table_owssvr__2[Date]"), SortOn:= _
xlSortOnValues, Order:=xlDescending, DataOption:=xlSortNormal
With ws.ListObjects("Table_owssvr__2"). _
Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub
答案 2 :(得分:0)
这适用于任何只有一个包含所需列名称的列表对象的工作表:
Sub Tester()
Dim tName As String
With ActiveSheet.ListObjects(1).Sort
tName = .Parent.Name 'list name
.SortFields.Clear
.SortFields.Add Key:=Range(tName & "[Number]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=Range(tName & "[ID]"), SortOn:=xlSortOnValues, _
Order:=xlAscending, DataOption:=xlSortTextAsNumbers
.SortFields.Add Key:=Range(tName & "[Date]"), SortOn:=xlSortOnValues, _
Order:=xlDescending, DataOption:=xlSortNormal
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End Sub