2016-04-06 3 views
0

VBA новичок здесь.Excel 2013 фильтрация по нескольким сводным таблицам OLAP

В то время как я был в состоянии синхронизировать несколько таблиц локальных сводных данных с помощью одного из кодов VBA, которые я нашел в Интернете, я борюсь со следующим:

У меня есть 16 OLAP связных сводных таблиц на одном листе. Каждый из них имеет 6 фильтров, причем 4 одинаковы для всех из них. Я хотел бы иметь возможность изменять все сводные таблицы с использованием одного из этих четырех фильтров.

ответ

0

Вы можете вставить слайсер для каждого из этих четырех полей. После того, как они будут добавлены, вы можете перейти к 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

Этот мир, вероятно, должен быть более чистым и коротким, чтобы прокручивать поворотные точки с помощью или для каждого цикла. –

Смежные вопросы