【问题标题】:VBA pivot table filter change based on cell value基于单元格值的VBA数据透视表过滤器更改
【发布时间】:2017-07-13 10:19:34
【问题描述】:

我有一个带有 2 个过滤器的数据透视表“IncTrend”。 这两个过滤器我都重命名为“Service1”和“Service2”(当从 powerpivot 创建表时,它们最初都称为 Service)

在工作表的 A2 中,我有一个服务验证列表的名称,其中包含过滤器中项目的名称(它们完全匹配)。

我正在尝试编写一个 VBA 代码,该代码将从 A2 中读取“Choice”,并更改数据透视表过滤器“Service1”和“Service2”以匹配它。

前提是我将有许多不同的数据透视表,其中包含不同的数据,我需要更改过滤器以匹配,但我什至无法使用 VBA 更改。

我一直在努力

无法获取数据透视表类的 PivotFields 属性

任何帮助将不胜感激。 这是 Pivot 表的 SS。

我的代码是:

Sub Filter_Change()

Dim WS As Worksheet: Set WS = ActiveWorkbook.Worksheets("Main")
Dim PT1 As PivotTable: Set PT1 = WS.PivotTables("IncTrend")
Dim PF1 As PivotField: Set PF1 = PT1.PivotFields("[Inc Open].[Service].[Service]")
Dim Choice As String: Choice = Worksheets("Main").Range("A2").Value

With PF1
    .ClearAllFilters
    .CurrentPage = Choice
    '.PivotFilters.Add Type:=xlCaptionEquals, Value1:=Choice
End With
End Sub

【问题讨论】:

  • 您确定您的PivotField 名称拼写为“Service1”吗?中间没有空格之类的?
  • 我对其进行了修改以确保它不会导致问题。我已经编辑了上面的代码,显示了您的建议和我的更改。

标签: vba excel pivot-table


【解决方案1】:

晚了三年,但也许这有助于有人试图找到相同问题的答案。

下面是最终解决我的类似问题的代码。我最终将我的代码直接添加到特定的工作表模块并添加了“如果相交”行。除此之外,它还应该作为标准模块中的公共子组件。

Private Sub Worksheet_Change(ByVal Target As Range)
    
If Intersect(Target, Range("A2:A3")) Is Nothing Then Exit Sub

Dim PT1 As PivotTable
Dim PF1 As PivotField
Dim Choice As String

Set PT1 = Worksheets("Main").PivotTables("IncTrend")
Set PF1 = PT1.PivotFields("[Inc Open].[Service].[Service]")
Choice = Worksheets("Main").Range("A2").Value

With PT1
  PF1.CurrentPageName = "[Inc Open].[Service].&[" & Choice & "]"
End With

End Sub

【讨论】:

    【解决方案2】:

    更换你的线路:

    PF1.CurrentPage.Name = Choice     
    

    与:

    With PF1
        .ClearAllFilters
        .CurrentPage = Choice
    End With
    

    【讨论】:

    • 谢谢 Shai,我按照你的建议做了。它将过滤器更改为(全部),但是当它到达 currentpage 行时,我得到“无法设置 PivotField 类的 CurrentPage 属性”。我用 .PivotFilters.Add Type:=xlCaptionEquals, Value1:=WS.Range("A2").Value 交换了当前页面行,现在得到“应用程序定义或对象定义错误”
    • @Fitzy 你能编辑你的帖子并附上你的PivtoTable 的屏幕截图吗?
    • 我添加了一个屏幕截图
    • @Shai 我按要求在屏幕截图中进行了编辑。任何帮助将不胜感激。
    猜你喜欢
    • 1970-01-01
    • 2014-08-06
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多