如何在一张纸上刷新切片机?

时间:2014-03-23 11:27:14

标签: excel vba pivot-table

我想清除工作表中所有切片器的过滤器,但让其他切片器“不刷新”。

我已经看到以下代码刷新了工作簿中的所有切片器,但却无法仅在特定工作表上使用它。

Dim slcr As SlicerCache

For Each slcr In ActiveWorkbook.SlicerCaches

    slcr.ClearManualFilter
Next slcr

感激不尽的任何帮助!

由于

1 个答案:

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