我徒劳地尝试让下面的宏运行正常。最终目标是一个宏,它将根据两个条件对多个表(在单个工作表上)进行排序,并且它也适用于任何活动的工作表。我可以创建一个具有精确表引用的宏,但是寻求更灵活的东西以避免为每个工作表设置宏。
我的大部分代码都来自于道格·格兰西在this post中的建议,但它并没有正常运行(正如在线程死亡前提到的原始海报)。宏运行没有错误,但实际上并没有对任何数据进行排序。
我认为破碎的部分是Key:=lo.ListColumns("Name of table column").Range
部分。我不熟悉该语法来解决它。
我感谢任何建议或替代方案!另外,如果我的要求不清楚,请告诉我。
Sub CustomSort()
Dim lo As Excel.ListObject
Dim ws As Excel.Worksheet
Set ws = ActiveSheet
For Each lo In ws.ListObjects
With lo.Sort
.SortFields.Add Key:=lo.ListColumns("Status").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=lo.ListColumns("Inventory Number").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.Apply
End With
Next lo
End Sub
答案 0 :(得分:2)
感谢TomDillinger提示我仔细研究宏的行为。我意识到宏在某些时候正在排序,尽管很少正确。我只是在.SortFields.Clear
行之前添加了.SortFields.Add
,这清除了任何现有的排序以便重新开始,所以可以说明宏中的排序命令。这是功能齐全的宏:
Sub CustomSort()
Dim lo As Excel.ListObject
Dim ws As Excel.Worksheet
Set ws = ActiveSheet
For Each lo In ws.ListObjects
With lo.Sort
.SortFields.Clear
.SortFields.Add Key:=lo.ListColumns("Status").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.SortFields.Add Key:=lo.ListColumns("Inventory Number").Range, SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
.Header = xlYes
.Apply
End With
Next lo
End Sub