2016-06-27 77 views
1

我想让我的功率主轴过滤器引用多个单元格中的一系列值。例如,如果我的过滤器具有值A,B,C,D,我希望它查看单元格A1:A10以查看有哪些值。如果A,B存在于A1:A10中,我希望过滤器只显示A和B(每个单元格只保存一个值,例如A1:A,A2:B,A3:“”等)Power Pivot VBA过滤器参考范围的单元格

With the下面的代码我只能引用一个值。

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 
+0

尝试'昏暗键()作为String''键=斯普利特(表( “工作表Sheet 3”),范围( “R1”)。价值 “”“)' –

+0

不行的,那是什么命令假设要做? –

+0

尝试'作为Variant' ...将字符串加载到数组本身。如果这不起作用,请参阅下面发布的答案 –

回答

0

有可能是一个更好的方式来做到这一点,但是从我的经验,要做到这一点的唯一方法是遍历PivotItemsPivotField中,并根据条件检查名称。

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