【问题标题】:Excel VBA - multiple filters on pivot table: one linked to filter other pivot table; one based on the cell I just clicked on in a selected rangeExcel VBA - 数据透视表上的多个过滤器:一个链接到过滤另一个数据透视表;一个基于我刚刚在选定范围内单击的单元格
【发布时间】:2017-11-25 17:20:04
【问题描述】:

我正在尝试编写一份基于位置和产品制作数据透视表的报告。
位置过滤器应该与该工作表上另一个数据透视表的过滤器相同(但是,我不能使用切片器,因为数据集不一样)。
产品过滤器应该会根据我刚刚在特定范围内单击的单元格而变化。

我已经尝试了很多在不同论坛上找到的东西,并根据我的需要进行了调整,但在我看来,问题是我需要一个私有子 SelectionChange 才能动态更改产品。但是,对于位置过滤器,我需要一个 PivotTableUpdate 私有子。不能同时在一张纸上吗?那么如何处理这些情况呢? 我用于 productfilter 的代码是:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

    Dim ws As Worksheet
    Dim pt As PivotTable

    If Target.Column = 13 Then
        Range("M2").Value = Target.Value

    End If
End Sub

这基本上是将第 13 列中单击的单元格中的值复制到单元格 M2,这是我的可透视过滤器的单元格。另一个问题是,如果我单击未提供有效过滤器条目的单元格,则会收到错误消息。如何解决?

【问题讨论】:

  • 如果两个数据透视表共享同一个数据透视表,只需为每个过滤器字段创建一个切片器,将其绑定到两个数据透视表。切片器可以在任何(隐藏的)工作表上,但会确保过滤器是同步的。
  • 就是这样。 2 个数据透视表不使用相同的数据

标签: excel vba


【解决方案1】:

如果两个数据透视表都在同一张工作表上并且有一个页面过滤器,则只需将其添加到 ThisWorkbook 模块即可:

Private Sub Workbook_SheetPivotTableUpdate(ByVal Sh As Object, ByVal Target As PivotTable)
    Application.EnableEvents = False
    If Target.PageRange.Column <> Sh.PivotTables(1).PageRange.Column Then
        Sh.PivotTables(1).PageRange.Cells(1, 2).Value = Target.PageRange.Cells(1, 2).Value
    Else
        Sh.PivotTables(2).PageRange.Cells(1, 2).Value = Target.PageRange.Cells(1, 2).Value
    End If
    Application.EnableEvents = True
End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-27
    • 1970-01-01
    • 2010-11-28
    • 1970-01-01
    相关资源
    最近更新 更多