VBA透视表过滤器根据单元格值进行更改

时间:2017-02-23 04:42:38

标签: excel vba excel-vba pivot-table

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

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

我正在尝试编写将从A2中的“选择”中读取的VBA代码,并更改数据透视表过滤器“Service1”& “Service2”与之匹配。

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

我一直在

  

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

非常感谢任何帮助。 这是数据透视表的SS。

enter image description here

我的代码是:

$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {

            initialize();

        });

2 个答案:

答案 0 :(得分:2)

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

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

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

答案 1 :(得分:0)

替换你的行:

PF1.CurrentPage.Name = Choice     

使用:

With PF1
    .ClearAllFilters
    .CurrentPage = Choice
End With