同步数据透视表 - VBA代码无法正常工作

时间:2016-02-07 19:44:10

标签: excel vba excel-vba pivot-table

我目前正在制作动态信息中心。我的计算表上有几个数据透视表来自不同的来源,但它们具有相同的过滤选项(日期,代理商名称等)。我的概述表从这些数据透视表中获取数据。我的想法是,基于连接到1个数据透镜的少数切片器,我可以更新其他数据透视表,并在概览表上操作结果。

我已使用以下代码同步过滤选项。当我在具有数据透视表的工作表中进行更改时,此代码运行良好。但是,如果我将切片器转换为概览表并尝试使用数据进行操作,则只有1个数据透视表在我的计算表上更新,因此概述表中只显示了一半信息。

代码将在概览和计算表上复制。请帮忙。

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

Dim wsMain As Worksheet
Dim ws As Worksheet
Dim ptMain As PivotTable
Dim pt As PivotTable
Dim pfMain As PivotField
Dim pf As PivotField
Dim pi As PivotItem
Dim bMI As Boolean

On Error Resume Next
Set wsMain = ActiveSheet
Set ptMain = Target

Application.EnableEvents = False
Application.ScreenUpdating = False

For Each pfMain In ptMain.PageFields
    bMI = pfMain.EnableMultiplePageItems
    For Each ws In ThisWorkbook.Sheets("CalculationSheet")
        For Each pt In ws.PivotTables
            If ws.Name & "_" & pt <> wsMain.Name & "_" & ptMain Then
                pt.ManualUpdate = True
                Set pf = pt.PivotFields(pfMain.Name)
                        bMI = pfMain.EnableMultiplePageItems
                        With pf
                            .ClearAllFilters
                            Select Case bMI
                                Case False
                                    .CurrentPage = pfMain.CurrentPage.Value
                                Case True
                                    .CurrentPage = "(All)"
                                    For Each pi In pfMain.PivotItems
                                        .PivotItems(pi.Name).Visible = pi.Visible
                                    Next pi
                                    .EnableMultiplePageItems = bMI
                            End Select
                        End With
                        bMI = False

                Set pf = Nothing
                pt.ManualUpdate = False
            End If
        Next pt
    Next ws
Next pfMain

Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub

1 个答案:

答案 0 :(得分:0)

我认为问题在于这一行:

For Each ws In ThisWorkbook.Sheets("CalculationSheet")

该行将代码限制为仅考虑名为“CalculationSheet”的工作表上的数据透视表。如果您希望它在工作簿中的所有工作表上工作,请将其更改为:

For Each ws In ThisWorkbook.WorkSheets

...根据http://blog.contextures.com/archives/2012/01/03/change-all-pivot-tables-with-one-selection/

的原始代码列表