我想要有两个数据透视表,其中我应用于其中一个的页面域中的过滤器也应用于另一个。我是用VBA做的。
我将两个数据透视表的事件处理程序设置为
Private Sub Worksheet_PivotTableUpdate(ByVal target As PivotTable)
Dim Other As PivotTable
If target.Name = "Component Table" Then
Set Other = ThisWorkbook.Worksheets("Categories in Comparison"). _
PivotTables("Operation Table")
Else
Set Other = ThisWorkbook.Worksheets("Categories in Comparison"). _
PivotTables("Component Table")
End If
Modul2.copyFilters target, Other
End Sub
调用sub copyFilters,其定义如下:
Sub copyFilters(source As PivotTable, destination As PivotTable)
Dim field As PivotField
For Each field In source.PageFields
Dim item As PivotItem
For Each item In field.PivotItems
If item.Name <> "(blank)" Then
If (destination.PageFields("Contract Type").PivotItems(item.Name). _
Visible <> item.Visible) Then
destination.PageFields("Contract Type").PivotItems(item.Name). _
Visible = item.Visible
End If
End If
Next item
Next field
End Sub
当我现在手动更改多个项目的可见性时,只有一次调用事件处理程序,当我选择要过滤的项目后按OK时。
但是当上面的子程序运行时,每次更改一个项目的可见性时,它将触发另一个数据透视表的事件处理程序。这是不受欢迎的,因为它会改变我手工制作的一些更改。
我想到的一个解决方案是在我操作它时将copyFilters中的事件处理程序从另一个数据透视表中分离,然后再次附加它。但是我该怎么做呢?或者我的问题还有其他/更好的解决方案吗?