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)
Gar*_*ent 30
如果工作表上已有过滤器,则:
Sub Macro1()
Cells.AutoFilter
End Sub
Run Code Online (Sandbox Code Playgroud)
将删除它.
Bob*_*byA 27
如果当前未应用过滤器,ShowAllData将抛出错误.这将有效:
Sub ResetFilters()
On Error Resume Next
ActiveSheet.ShowAllData
End Sub
Run Code Online (Sandbox Code Playgroud)
小智 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)
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)
这将显示所有数据,并删除下拉按钮。它在从多个工作表或工作簿堆叠(复制和粘贴)数据时派上用场。希望这可以帮助。
我发现这种解决方法非常有效.它基本上从表中删除自动过滤器,然后重新应用它,从而删除任何以前的过滤器.根据我的经验,这不容易出现这里提到的其他方法所需的错误处理.
Set myTable = YOUR_SHEET.ListObjects("YourTableName")
myTable.ShowAutoFilter = False
myTable.ShowAutoFilter = True
Run Code Online (Sandbox Code Playgroud)