我正在尝试清除特定工作表上的所有切片器,但遇到下一个错误:
此行中的“未设置对象变量或带块变量”:cache.ClearManualFilter
。
我的代码:
Sub Clear_all_filters()
Dim cache As SlicerCache
Set mWS = Sheets("Specific_Sheet")
For Each cache In mWS.SlicerCaches
cache.ClearManualFilter
Next cache
End Sub
谢谢!
答案 0 :(得分:0)
首先,您应该转到“工具”>“选项”,然后打开“需要变量声明”。这会将Option Explicit添加到任何新模块的顶部(您需要将其自己添加到任何现有模块中)。
这将迫使您声明mWS,根据Set命令,它必须是Worksheet类。当您尝试运行代码时,这将显示错误“找不到方法或数据成员”。
这是因为SlicerCaches是Workbook类中的属性,而不是Worksheet中的属性(如此处所述:https://docs.microsoft.com/en-us/office/vba/api/excel.slicercache)
在这种情况下,我们可以删除对mWS的所有引用,而只需使用ThisWorkbook。如此一来,它将遍历当前工作簿中的所有切片器,因此,如果您想将其限制在一张纸上,可能需要做一些额外的挖掘。
Option Explicit
Sub Clear_all_filters()
Dim cache As SlicerCache
For Each cache In ThisWorkbook.SlicerCaches
cache.ClearManualFilter
Next cache
End Sub
答案 1 :(得分:0)
为了防止有人仍在寻找此问题的解决方案,以下是我现在使用的代码:
Sub OnePageSlicersReset()
Dim slcrC As SlicerCache
Dim slcr As Slicer
Application.ScreenUpdating = False
For Each slcrC In ActiveWorkbook.SlicerCaches
For Each slcr In slcrC.Slicers
If slcr.Shape.Parent Is ActiveSheet Then
If slcrC.FilterCleared = False Then
slcrC.ClearManualFilter
Exit For
End If
End If
Next slcr
Next slcrC
Application.ScreenUpdating = True
End Sub