Excel 2007跨多个数据透视表进行过滤

时间:2009-09-14 20:31:45

标签: excel pivot-table excel-vba vba

在Excel 2007中,我有一个Excel表格形式的单个数据集,我想从中创建多个数据透视表和数据透视表。我希望能够同时在所有数据透视表和图表中同步“报告过滤器”字段,以便通过过滤(例如)其中一个数据透视表上的US_Region字段到“Pacific Northwest”将应用该字段过滤到工作簿中的所有数据透视表和图表(共享一个数据集)。有没有办法在没有VBA的情况下做到这一点,如果没有,那么在VBA中最灵活/最不具备克服的方法是什么?

由于

1 个答案:

答案 0 :(得分:2)

创建一个更改所有页面字段的过程。这个循环遍历工作簿中的所有工作表,如果工作表有一个数据透视表,它会更改页面字段以匹配传递给子数据透视表的页面字段。

Sub ChangePage(pt As PivotTable)

    Dim strPageValue As String
    Dim wks As Worksheet
    Dim ptUpdate As PivotTable

    Application.ScreenUpdating = False
    Application.EnableEvents = False

    strPageValue = pt.PivotFields("Area").CurrentPage

    For Each wks In ThisWorkbook.Worksheets

        On Error Resume Next
        Set ptUpdate = wks.PivotTables(1)

        If Err.Number = 0 Then
            On Error GoTo 0
            wks.PivotTables(1).PivotFields("Area").ClearAllFilters
            wks.PivotTables(1).PivotFields("Area").CurrentPage = strPageValue
        End If
        Err.Clear

    Next wks

    Application.ScreenUpdating = True
    Application.EnableEvents = True

End Sub

然后在工作表代码中调用此过程并传递您更改的数据透视表:

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)

    Call ChangePage(Target)

End Sub

将数据透视表字段的名称从“区域”更改为您需要的页面字段,例如“US_Region”。

如果人们经常以其他方式更改数据透视表的结构,这可能不合适,因为每次更改数据透视表时都会触发,包括刷新表时。如果用户删除指定的页面字段,它也会出错。

如果数据透视表是静态的,可能会这样做。