Power Pivot VBA过滤器参考范围的单元格

时间:2016-06-27 16:29:32

标签: excel vba excel-vba powerpivot

我正在尝试将功率透视滤镜引用到多个单元格中的一系列值。例如,如果我的过滤器具有值A,B,C,D,我希望它查看单元格A1:A10以查看有哪些值。如果A,B存在于A1:A10中,我希望过滤器仅显示A和B(每个单元只保存一个值,例如A1:A,A2:B,A3:“”等)

使用下面的代码,我只能引用一个值。

Sub SelectKey()


    Dim key As String

    key = Sheets("Sheet3").Range("R1").Value

    Sheets("data").PivotTables("PivotTable6").PivotFields("[v_cprs_dashboard_metrics].[metric_key].[metric_key]").VisibleItemsList = Array("[v_cprs_dashboard_metrics].[metric_key].&[" & key & "]")

End Sub

这适用于常规数据透视表但不适用于powerpivot

With Worksheets("data").PivotTables("PivotTable6").PivotFields("metric_key")
        .ClearAllFilters
        For Each PI In .PivotItems
            PI.Visible = WorksheetFunction.CountIf(Sheets("Sheet3").Range("range1"), PI.Name) > 0
        Next PI
    End With

1 个答案:

答案 0 :(得分:0)

可能有更好的方法可以做到这一点,但根据我的经验,完成此任务的唯一方法是遍历PivotItems中的PivotField并根据条件检查名称。< / p>

Sub SelectKey()

Dim key() As String

key = Split(Sheets("Sheet3").Range("R1").Value, ",") 'load comma separated string to array

Dim pi As PivotItem
For Each pi In Sheets("data").PivotTables("PivotTable6").PivotFields("[v_cprs_dashboard_metrics].[metric_key].[metric_key]").PivotItems

    Dim i As Integer
    For i = LBound(key) To UBound(key) 'loop through array

        If pi.Name = key(i) Then
            pi.Visible = True
            Exit For
        Else
            pi.Visible = False
        End If

    Next

Next

End Sub