Excel 2013 VBA清除所有过滤器宏

CJS*_*ier 38 excel vba excel-vba excel-vba-mac

似乎较旧的宏不起作用.我有适当的安全设置来运行VBA宏,但是当我尝试了一些方法来清除工作表上的所有过滤器时,我收到编译错误.

这是我尝试过的:

__PRE__

我在工作表上有按钮以清除所有过滤器,以方便用户使用,因为工作表上有很多带有过滤器的列.

小智 53

试试这个:

If ActiveSheet.AutoFilterMode Then ActiveSheet.ShowAllData
Run Code Online (Sandbox Code Playgroud)

  • 很好,但如果过滤器已被清除则失败 (4认同)

Gar*_*ent 30

如果工作表上已有过滤器,则:

Sub Macro1()
    Cells.AutoFilter
End Sub
Run Code Online (Sandbox Code Playgroud)

将删除它.

  • @CJSoldier该解决方案从表中删除`Autofilter`干脆......这听起来像你需要保持`AutoFilter`但去除过滤,权? (10认同)

Bob*_*byA 27

如果当前未应用过滤器,ShowAllData将抛出错误.这将有效:

Sub ResetFilters()
    On Error Resume Next
    ActiveSheet.ShowAllData
End Sub
Run Code Online (Sandbox Code Playgroud)

  • 在什么情况下ActiveSheet.ShowAllData"覆盖现有数据"? (2认同)
  • @Winand,我可能误解了你的说法,但重置数据透视表过滤器是预期的行为。 (2认同)

小智 16

对于表格,请尝试检查它是否打开和关闭:

If wrkSheetCodeName.ListObjects("TableName").ShowAutoFilter Then
    wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
End if
Run Code Online (Sandbox Code Playgroud)

要重新开启:

wrkSheetCodeName.ListObjects("TableName").Range.AutoFilter
Run Code Online (Sandbox Code Playgroud)


小智 9

这很好用.!

If ActiveSheet.AutoFilterMode Then Cells.AutoFilter
Run Code Online (Sandbox Code Playgroud)


小智 6

那太棒了,我发现的唯一满足我特殊需求的答案,非常感谢你提出来!

我只是对它做了一个小补充,这样屏幕就不会闪烁,它会在每个工作表循环时删除并随后重新应用密码[我对工作簿中的所有工作表都有相同的密码]。本着您提交的精神,我添加了这个以帮助其他人......

Sub ClearFilters()
    Application.ScreenUpdating = False

    On Error Resume Next
    For Each wrksheet In ActiveWorkbook.Worksheets
        'Change the password to whatever is required
        wrksheet.Unprotect Password:="Albuterol1"
        wrksheet.ShowAllData 'This works for filtered data not in a table

        For Each lstobj In wrksheet.ListObjects
            If lstobj.ShowAutoFilter Then
                lstobj.Range.AutoFilter 'Clear filters from a table
                lstobj.Range.AutoFilter 'Add the filters back to the table
            End If

        'Change the password to whatever is required
        wrksheet.Protect Password:="Albuterol1", _
              DrawingObjects:=True, _
              Contents:=True, _
              Scenarios:=True, _
              AllowFiltering:=True
        Next 'Check next worksheet in the workbook
    Next

    Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)

我知道这是一篇相对较旧的帖子,并不真的喜欢成为死灵法师......但是由于我遇到了同样的问题并且在这个线程中尝试了一些选项但没有成功,我结合了一些答案来获得一个有效的宏..

希望这可以帮助那里的人:)

Sub ResetFilters()
    On Error Resume Next
    For Each wrksheet In ActiveWorkbook.Worksheets
        wrksheet.ShowAllData 'This works for filtered data not in a table
        For Each lstobj In wrksheet.ListObjects
            If lstobj.ShowAutoFilter Then
                lstobj.Range.AutoFilter 'Clear filters from a table
                lstobj.Range.AutoFilter 'Add the filters back to the table
            End If
        Next 'Check next worksheet in the workbook
    Next
End Sub
Run Code Online (Sandbox Code Playgroud)


Eja*_*med 6

Excel 中有两种类型的过滤器:

  • 自动过滤器
  • 高级过滤器

自动过滤功能让您可以使用这些微小的下拉按钮从 Excel 界面进行过滤。高级过滤器功能让您可以使用条件范围进行过滤。

ShowAll 方法删除过滤器,如显示所有行,但不会删除那些下拉按钮。您必须将工作表的 AutoFilterMode 属性设置为 FALSE 才能删除这些按钮。

这是我经常用来删除过滤器的 Sub:

Sub RemoveFilters(ByRef WhichSheet As Worksheet)

If WhichSheet.FilterMode Then WhichSheet.ShowAllData
If WhichSheet.AutoFilterMode Then WhichSheet.AutoFilterMode = False

End Sub
Run Code Online (Sandbox Code Playgroud)

这将显示所有数据,并删除下拉按钮。它在从多个工作表或工作簿堆叠(复制和粘贴)数据时派上用场。希望这可以帮助。


Jul*_*ørk 5

我发现这种解决方法非常有效.它基本上从表中删除自动过滤器,然后重新应用它,从而删除任何以前的过滤器.根据我的经验,这不容易出现这里提到的其他方法所需的错误处理.

Set myTable = YOUR_SHEET.ListObjects("YourTableName")

myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True
Run Code Online (Sandbox Code Playgroud)