【发布时间】:2017-10-03 15:46:28
【问题描述】:
我有一个带有两个具有完全相同切片器的数据透视表的工作簿。我正在使用 VBA 脚本来同步两个切片器。我将它们命名为“Slicer_xxxx_Master”,另一个为“Slicer_xxxx_Slave”。
下面的代码可以正常工作,除了有很多选项的切片器。由于它会一一设置切片,因此它会一遍又一遍地重新过滤数据透视表,直到设置了所有需要的切片。
有没有一种方法可以将所有切片项的值收集到一个数组中,然后一次性设置 Slave 切片器的值?
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Application.ScreenUpdating = False
Dim sC As SlicerCache
Dim sC_Slave As SlicerCache
Dim SL As SlicerCacheLevel
Dim sI As SlicerItem
Dim sI_Slave As SlicerItem
For Each sC In ActiveWorkbook.SlicerCaches
If InStr(1, sC.Name, "Master") Then
Set sC_Slave = ThisWorkbook.SlicerCaches(Replace(sC.Name, "Master", "Slave"))
For Each sI In sC.SlicerItems
If sI.Name <> ("(blank)") Then
Set sI_Slave = sC_Slave.SlicerItems(sI.Name)
If sI_Slave.Selected <> sI.Selected Then
sI_Slave.Selected = sI.Selected
End If
End If
Next
End If
Next
Application.ScreenUpdating = True
End Sub
【问题讨论】:
-
几个问题:首先,我们在这里谈论的是 Table Slicers 还是 PivotTable Slicers。我假设枢轴。如果是这样,枢轴“传统”枢轴是基于工作簿中的范围,还是基于 OLAP/PowerPivot 模型?它们是基于完全相同的数据源(在这种情况下,您只需修改 SlicerConnections 属性,以便它们在没有代码的情况下同步每个枢轴)还是不同的缓存?
-
您好,谢谢。数据透视表切片器,传统的数据透视表。它们具有单独的数据集,但两个集具有完全相同的切片字段。每个数据透视表实际上有 5 个单独的切片器,但它们都分别命名为“Master”和“Slave”。主切片器在仪表板表上可见,从切片器隐藏在与数据透视表相同的表上,因此只需单向同步即可。
标签: vba excel pivot-table