2016-04-06 18 views
0

VBA初心者ここに。私はオンラインで見つけるVBAコードのいずれかを使用して複数のローカルデータピボットテーブルを同期することができましたが複数のOLAPピボットテーブルでのExcel 2013フィルタリング

、私は次のように苦しんでいます:

私は1枚のシートに16のOLAP接続されているピボットテーブルを持っています。それぞれには6つのフィルタがあり、4つのフィルタはすべて同じフィルタです。これらの4つのフィルタのいずれかを使用して、すべてのピボットテーブルを変更できるようにしたいと思います。

答えて

0

これら4つのフィールドごとにスライサーを挿入できます。それらが追加されたら、Slicer Connectionsに行き、関連するすべてのピボットを選択することができます。

VBAを探している場合は、シート上のすべてのピボットをループし、すべてのレポートフィルタメンバーをループし、選択した値を配列に格納する必要があります。

また、隠しタブにスライサーを作成し、CUBERANKEDMEMBER関数を使用してスライサーのすべての選択を戻し、それを使用して配列を作成し、レポートのいずれかがピボットテーブルに適用されるようにすることができますフィルターの変更(ワークシートにWorksheet_PivotTableAfterValueChange手順を使用することができます)

ここでは、我々は2つのピボットテーブルでそれを行っている方法です。

Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable) 
''''variables for pivottable changed 
    Dim pivotname As String 
    Dim pivotname2 As String 
    Dim PT As PivotTable 
    Dim PT2 As PivotTable 

''''variables for pivotrowfields 
    Dim pti As PivotItem 
    Dim pti2 As PivotField 

''''variables for pagefilters 
    Dim PF As PivotField 
    Dim colPageFields As PivotFields 
    Dim aFilters As Variant 

'''Un-enable events to avoid an endless loop 
    Application.EnableEvents = False 

'''Set variables 
    pivotname = Target.Name 

    If pivotname = "PivotTable1" Then 
     pivotname2 = "PivotTable4" 
    Else 
     pivotname2 = "PivotTable1" 
     pivotname = "PivotTable4" 
    End If 

    If ActiveSheet.Name = "Slicer Setup" Then 
     Sheets("By Org Structure").Activate 
    End If 

    Set PT = ActiveSheet.PivotTables("" & pivotname & "") 
    Set PT2 = ActiveSheet.PivotTables("" & pivotname2 & "") 

    Set colPageFields = PT.PageFields 

'''action for changing the filters on Page Fields 
    For Each PF In colPageFields 

        PF.CubeField.EnableMultiplePageItems = True 
        'PT2.PivotFields(PF.Name).CubeField.EnableMultiplePageItems = True 
        aFilters = PT.PivotFields(PF.Name).VisibleItemsList 
        If aFilters(1) = "" Then 
         If PT.PivotFields(PF.Name).CubeField.AllItemsVisible = True Then 
          PT2.PivotFields(PF.Name).ClearAllFilters 
         Else 
          PT2.PivotFields(PF.Name).VisibleItemsList = Array("") 
         End If 
        Else 
         PT2.PivotFields(PF.Name).VisibleItemsList = Array(aFilters) 
        End If 

    Next 

Set colPageFields = PT.RowFields 

'''action for changing the filters on Row Fields 
    For Each PF In colPageFields 
        PF.CubeField.EnableMultiplePageItems = True 
        'PT2.PivotFields(PF.Name).CubeField.EnableMultiplePageItems = True 
        aFilters = PT.PivotFields(PF.Name).VisibleItemsList 
        If aFilters(1) = "" Then 
         If PT.PivotFields(PF.Name).CubeField.AllItemsVisible = True Then 
          PT2.PivotFields(PF.Name).ClearAllFilters 
         Else 
          PT2.PivotFields(PF.Name).VisibleItemsList = Array("") 
         End If 
        Else 
         PT2.PivotFields(PF.Name).VisibleItemsList = Array(aFilters) 
        End If 
    Next 


'''Re-enable events to allow for this event macro to be kicked off again next time pivottables are changed 
    Application.EnableEvents = True 

    ActiveWorkbook.ShowPivotTableFieldList = False 

End Sub 
+0

は、ピボットテーブルのフィールドをグループ化しているように、私はスライサーをリンクすることができないようで、 OLAPに基づいています。 VBAコードを調整するときに、私が持っているすべてのピボットテーブルを暗くし、それらのコードを複製する必要があると仮定するのは正しいですか? – onevba

+0

forループまたはforループを使用してピボットをループするのは、もっときれいで短くなるでしょう。 –

関連する問題