首页 > 解决方案 > 从整个工作表(多个表)中清除自动筛选

问题描述

我正在做一个项目,我添加了一个按钮来自动隐藏/取消隐藏我的输入部分中未使用的行。我在另一个只包含一个表格的页面上使用了它,它工作得很好。但是,在此工作表上,该按钮可将过滤器应用于所有表格,但是,当我点击按钮取消隐藏时,它只会清除工作表上第一个表格中的自动过滤器,但其他表格上的过滤器仍保持打开状态。我不确定这里发生了什么,但我在下面附上了我的代码:

Private Sub OpAssumptionsToggle_Click()
 
    'Declarations
    Set ActIncAss = ListObjects("ActualIncomeAssumptions")
    Set ActExpAss = ListObjects("ActualExpenseAssumptions")
    Set S1IncAss = ListObjects("S1IncomeAssumptions")
    Set S1ExpAss = ListObjects("S1ExpenseAssumptions")
    Set S2IncAss = ListObjects("S2IncomeAssumptions")
    Set S2ExpAss = ListObjects("S2ExpenseAssumptions")
    Set PFIncAss = ListObjects("PFIncomeAssumptions")
    Set PFExpAss = ListObjects("PFExpenseAssumptions")
        
    'Select Range
    ActIncAss.Range.Select
    
    'Hide/Unhide Rows
    If ActiveSheet.FilterMode Then
        ActiveSheet.AutoFilter.ShowAllData
    Else
        ActIncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
        ActExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
        S1IncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
        S1ExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
        S2IncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
        S2ExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
        PFIncAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
        PFExpAss.Range.AutoFilter Field:=6, Criteria1:="<>0"
    End If
    
    'Unselect and Select A1
    Application.CutCopyMode = False
    Range("A1").Select

End Sub

标签: excelvba

解决方案


清除每个表的过滤器;可能最容易循环:

Dim tbl As ListObject
For Each tbl in ActiveSheet.ListObjects
    tbl.AutoFilter.ShowAllData
Next

请注意,您可以将此逻辑扩展到应用过滤器:

For Each tbl in ActiveSheet.ListObjects
    tbl.Range.AutoFilter Field:=6, Criteria1:="<>0"
Next

推荐阅读