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

Power Pivot VBA过滤器单元格的参考范围,vba,excel,powerpivot,Vba,Excel,Powerpivot,我正在尝试将我的power pivot筛选器引用到多个单元格中的一系列值。例如,如果我的过滤器有值A、B、C、D,我希望它查看单元格A1:A10以查看有哪些值。如果A1:A10中存在A、B,我希望过滤器仅显示A和B(每个单元格仅包含一个值,例如A1:A、A2:B、A3:“”等) 使用下面的代码,我只能引用一个值 Sub SelectKey() Dim key As String key = Sheets("Sheet3").Range("R1").Value Sh

我正在尝试将我的power pivot筛选器引用到多个单元格中的一系列值。例如,如果我的过滤器有值A、B、C、D,我希望它查看单元格A1:A10以查看有哪些值。如果A1:A10中存在A、B,我希望过滤器仅显示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

也许有更好的方法可以做到这一点,但根据我的经验,实现这一点的唯一方法是循环通过
数据透视字段中的
数据透视项
,并根据条件检查名称

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

也许有更好的方法可以做到这一点,但根据我的经验,实现这一点的唯一方法是循环通过
数据透视字段中的
数据透视项
,并根据条件检查名称

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

尝试
Dim key()作为字符串
key=Split(Sheets(“Sheet3”).Range(“R1”).Value,,”)
不起作用,该命令应该做什么?尝试
作为变量
…将字符串本身加载到数组中。如果不起作用,请参阅下面我发布的答案try
Dim key()作为字符串
key=Split(Sheets(“Sheet3”).Range(“R1”).Value,“,”)
不起作用,该命令应该做什么?请尝试将
作为变量
。。。将字符串本身加载到数组中。如果这不起作用,请参阅我在下面发布的答案