如何只清除一张纸上的所有切片器?

时间:2018-12-20 16:08:42

标签: excel vba excel-vba

我正在尝试清除特定工作表上的所有切片器,但遇到下一个错误: 此行中的“未设置对象变量或带块变量”: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

谢谢!

2 个答案:

答案 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