从所有Excel表VBA中删除筛选器

时间:2017-07-24 14:20:05

标签: excel vba excel-vba

我正在创建一些Excel加载项,以便为用户完成一些基本任务。我们为每个项目提供了一个电子表格供我们的用户使用。在我们处理转换为SQL数据库之前,他们使用这些电子表格对可配置项进行更改。当他们完成电子表格时,他们常常忘记取消隐藏行,列和/或删除过滤器。我想创建一个宏,可以从每个工作表中运行Unhide Rows / Columns并清除每个ListObject的过滤器。这是我试图使用的代码:

Sub RemoveFiltersUnhide()
    Dim i As Long

    Application.ScreenUpdating = False

    For i = 1 To ThisWorkbook.Worksheets.Count
        ThisWorkbook.Worksheets(i).AutoFilterMode = False
        ThisWorkbook.Worksheets(i).Rows.Hidden = False
        ThisWorkbook.Worksheets(i).Columns.Hidden = False
    Next i

    Application.ScreenUpdating = True
End Sub

该代码适用于在每张纸上取消隐藏行/列,但它不会清除过滤器。由于每个提供的工作簿都不同,并且不包含相同的工作表或列表对象,因此我不知道如何循环遍历每个表。有人对我如何处理这个问题有任何想法吗?

工作VBA:

Sub RemoveFiltersUnhide()
    Dim ws As Worksheet, lo As ListObject

    Application.ScreenUpdating = False

    For Each ws In ThisWorkbook.Worksheets
        ws.Rows.Hidden = False
        ws.Columns.Hidden = False

        For Each lo In ws.ListObjects
            lo.AutoFilter.ShowAllData
        Next
    Next

    Application.ScreenUpdating = True
End Sub

2 个答案:

答案 0 :(得分:3)

如果提供的语法here正确,则以下内容应该有效。

Dim Sheet As Excel.Worksheet, List As Excel.ListObject

For Each Sheet In ThisWorkbook.Sheets
    For Each List In Sheet.ListObjects
        List.AutoFilter.ShowAllData
    Next
Next

答案 1 :(得分:2)

代码就是这样。

Sub RemoveFiltersUnhide()

Dim i As Long
Dim Ws As Worksheet
Application.ScreenUpdating = False

For Each Ws In Worksheets
    With Ws
        If .FilterMode Then
            .ShowAllData
        End If
        .Rows.Hidden = False
        .Columns.Hidden = False

    End With
Next Ws

Application.ScreenUpdating = True

End Sub