在不触发事件处理程序的情况下更改vba中的数据透视表

时间:2014-04-30 09:36:05

标签: excel vba

我想要有两个数据透视表,其中我应用于其中一个的页面域中的过滤器也应用于另一个。我是用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中的事件处理程序从另一个数据透视表中分离,然后再次附加它。但是我该怎么做呢?或者我的问题还有其他/更好的解决方案吗?

0 个答案:

没有答案