遍历所有表并进行排序

时间:2018-08-15 03:13:14

标签: excel vba

我正在尝试编写一个子集来遍历工作簿中的所有表并删除所有过滤器,然后按字母顺序对第一列进行排序 我提出了以下代码,但是我在使用正确的语法时遇到了一些问题。它将清除过滤器,但不进行排序。
我试图在此站点和其他站点上找到其他解决方案,但是它们似乎都指向特定的命名范围,在处理多个表时,我想避免这些命名范围。我认为这只是我如何完成“钥匙”的问题。

Private Sub ClearAllFilters()

Dim sht As Excel.Worksheet
Dim lstobj As Excel.ListObject

On Error Resume Next
For Each sht In ThisWorkbook.Sheets
    For Each lstobj In sht.ListObjects
        lstobj.AutoFilter.ShowAllData
        With lstobj.Sort
            .SortFields.Clear
            .SortFields.Add Key:=lstobj.DataBodyRange.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
        End With
    Next
Next

End Sub

1 个答案:

答案 0 :(得分:0)

指定排序选项后,您需要Apply进行排序。


还有一些建议:

  • 删除On Error Resume Next-处理可能发生的任何错误(如有必要);这只是忽略它们而继续前进。
  • 例如,只有一个Worksheet可以有一个ListObject-一个Chart表单不能。因此,遍历ThisWorkbook.Worksheets

Private Sub ClearAllFilters()

Dim sht As Worksheet
Dim lstobj As ListObject

For Each sht In ThisWorkbook.Worksheets
    For Each lstobj In sht.ListObjects
        lstobj.AutoFilter.ShowAllData
        With lstobj.Sort
            .SortFields.Clear
            .SortFields.Add Key:=lstobj.DataBodyRange.Columns(1), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
            .Apply
        End With
    Next lstobj
Next sht

End Sub