首页 文章

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

提问于
浏览
1

我正在创建一些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 回答

  • 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
    
  • 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
    

相关问题