我想清除工作表中所有切片器的过滤器,但让其他切片器“不刷新”。
我已经看到以下代码刷新了工作簿中的所有切片器,但却无法仅在特定工作表上使用它。
Dim slcr As SlicerCache
For Each slcr In ActiveWorkbook.SlicerCaches
slcr.ClearManualFilter
Next slcr
感激不尽的任何帮助!
由于
答案 0 :(得分:2)
经过一段时间的游戏和测试(以前从未使用切片机通过VBA),我得出了以下内容。
但是,请注意,slicercache可以在不同的工作表上使用切片器。切片器链接到切片器高速缓存,切片器高速缓存又链接到数据源(例如数据透视表)。如果更改了任何切片器,则会更改切片器缓存,这也会更改数据透视表。您不能将1个带过滤器的切片器和另一个切片器链接到同一个数据透视表并关闭过滤器,因为数据透视表由切片器的过滤器更新。这没有意义。 ;-)
有多少切片器和多个数据透视表是有意义的 - 使用下面的内容确实会清除一个切片器/缓存/数据透视的过滤器,但不会更改任何其他切片器/缓存/数据透视表。这是它可以工作的唯一方式,所以希望这就是你想要的东西!!
Sub test()
RefreshSlicersOnWorksheet ActiveSheet
End Sub
Public Sub RefreshSlicersOnWorksheet(ws As Worksheet)
Dim sc As SlicerCache
Dim scs As SlicerCaches
Dim slice As Slicer
Set scs = ws.Parent.SlicerCaches
If Not scs Is Nothing Then
For Each sc In scs
For Each slice In sc.Slicers
If slice.Shape.Parent Is ws Then
sc.ClearManualFilter
Exit For 'unnecessary to check the other slicers of the slicer cache
End If
Next slice
Next sc
End If
End Sub