2016-04-06 18 views
0

Burada VBA yöneticisi.Excel 2013 çoklu OLAP pivot tabloları üzerinde filtreleme

Ben Bir sayfaya 16 OLAP bağlı pivot tablolar vardır:

Ben şu ile mücadele ediyorum, ben çevrimiçi bulundu VBA kodlarından birini kullanarak birden fazla yerel veri pivot tablolar senkronize etmek mümkün iken. Her biri, hepsinde aynı 4 olmak üzere 6 filtreye sahiptir. Bu dört filtreden birini kullanarak tüm pivot tablolarını değiştirebilmek istiyorum.

cevap

0

Bu dört alanın her birine bir dilimleyici ekleyebilirsiniz. Eklendikten sonra Slicer Connections'a gidebilir ve ilgili tüm pivotlarınızı seçebilirsiniz.

VBA'yı arıyorsanız, sayfadaki tüm pivotları devre dışı bırakmanız ve daha sonra tüm Rapor Filtreleri üyeleri arasında dolaşmanız ve seçilen değerleri bir diziye depolamanız gerekir.

Ya da gizli bir sekmede dilimleyiciler oluşturabilir ve CUBERANKEDMEMBER işlevini kullanarak dilimleyicinin tüm seçimlerini geri getirebilir ve ardından dizininizi oluşturmak ve raporunuzdan herhangi birinde pivot tablolarınıza uygulamak için bunu kullanabilirsiniz. filtreler

İşte

biz 2 pivot tabloları ile yapmış nasıl (eğer çalışma sayfasında bir Worksheet_PivotTableAfterValueChange prosedürü kullanabilirsiniz) değiştirin: Pivot Tablo alanlarını gruplandırılmış olduğu gibi, ben dilimleyiciyi bağlantı olamayacağını

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

görünüyor ve OLAP dayanmaktadır. VBA kodunuzu ayarlarken sahip olduğum tüm PivotTable'ları azaltmam ve bunlara kod eklemem gerektiğini varsayar mıyım? – onevba

+0

Dünya, muhtemelen, her bir döngü için ya da her bir döngüde pivotlarla döngü yapmak için daha temiz ve kısa olabilir. –