我怎样才能让多个数据透视表模仿excel中的那张表上的另一个filter(报表和行标签)?

所以我在Excel中的一个表上有多个数据透视表。 我在行标签里有很长的几个月。 报表filter是可以按名称过滤的。 所有的支柱只是数据的总和。

我在找什么(我猜macros是唯一的办法),是一种能够改变filter的方式在该表中的一个枢纽,它只更新其他枢轴只表来模仿我改变的filter(包括报告和行标签)。 其他数据透视表中没有其他内容可以更改 – 只是filter。

不幸的是,我几乎不知道编码vba(我知道一些Java和东西,但我从来没有做过任何macros编码)。 我能够从互联网上复制出一个我所需要的一部分macros。 它会更新报表filter,但不会更新行标签filter中的date。 这是编码:

Option Explicit Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) On Error Resume Next 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 'change all fields for all pivot tables on active sheet For Each pfMain In ptMain.PageFields bMI = pfMain.EnableMultiplePageItems For Each pt In wsMain.PivotTables If pt <> 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 pfMain Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

有没有办法做我想要做的事情? 您的帮助将非常感谢!

没有看到你的数据透视表,似乎你需要做的上面的代码是重复从设置pivotfield值来反映date的步骤。 这是通过添加由该行设置的循环的变体完成的:

  set pf = pt.pivotfields(pfmain.name) 

  set pf = pt.pivotfields(pfmain.nameofyourrowfiltervariable) 

完整的代码在下面,我也将避免错误恢复下一步

  Option Explicit Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) On Error Resume Next 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 'change all fields for all pivot tables on active sheet For Each pfMain In ptMain.PageFields bMI = pfMain.enablemultiplepageitems For Each pt In wsMain.PivotTables If pt <> 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 = pt.pivotfields(pfMain.nameofdatevariable) dates = pfMain.enablemultiplepageitems with pf .clearallfilters select case dates case false .currentpage = pfmain.currentpage.value case true .currentpage = "(All)" for each pi in pfmain.pivotitems .pivotitems(pi.nameofdatevariable).visible = pi.visible next pi .enablemultiplepageitems = dates end select end with date = false set pf = nothing pt.ManualUpdate = False End If Next pt Next pfMain Application.EnableEvents = True Application.ScreenUpdating = True End Sub 

尝试一下,看看它是否有效我还没有testing过这个