宏在两个条件上对多个表进行排序

时间:2014-11-11 01:00:30

标签: excel vba sorting excel-vba

我徒劳地尝试让下面的宏运行正常。最终目标是一个宏,它将根据两个条件对多个表(在单个工作表上)进行排序,并且它也适用于任何活动的工作表。我可以创建一个具有精确表引用的宏,但是寻求更灵活的东西以避免为每个工作表设置宏。

我的大部分代码都来自于道格·格兰西在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

1 个答案:

答案 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