2016-08-17 5 views
0

Была попытка установить список одинаковых элементов для нескольких сводных таблиц OLAP на основе изменений, которые я делаю в одной из многочисленных сводных таблиц в книге.set Список элементов для нескольких сводных таблиц

Записанный макрос (это удаляет старые выборы, а):

Sub GetPivotFilter() 

ActiveSheet.PivotTables("Pivottabell4").PivotFields(_ 
    "[DimCampaign].[Campaigns].[Campaign]").VisibleItemsList = Array(_ 
    "[DimCampaign].[Campaigns].[Campaign].&[106679]", _ 'generated after i select campaing 
    "[DimCampaign].[Campaigns].[Campaign].&[106680]", _'generated after i select campaing 

    "[DimCampaign].[Campaigns].[Campaign].&[107049]")'generated after i select campaing 


End Sub 

Как я могу извлечь изменения я делаю в первой оси (я не буду знать номера, прежде чем я внести изменения)?

Как это можно применить к тем сводным таблицам, в которых есть возможность добавить кампанию?

Решение у меня есть на данный момент выглядит неаккуратно, но работает:

Sub SetPivotFilter() 

ActiveSheet.PivotTables("Pivottabell4").PivotFields(_ 
"[DimCampaign].[Campaigns].[Campaign]").VisibleItemsList = Array(_ 
"[DimCampaign].[Campaigns].[Campaign].&[106679]", _  
"[DimCampaign].[Campaigns].[Campaign].&[106680]", _  
"[DimCampaign].[Campaigns].[Campaign].&[107049]") 
ActiveSheet.PivotTables("Pivottabell18").PivotFields(_ 
"[DimCampaign].[Campaigns].[Campaign]").VisibleItemsList = Array(_ 
"[DimCampaign].[Campaigns].[Campaign].&[106679]", _  
"[DimCampaign].[Campaigns].[Campaign].&[106680]", _  
"[DimCampaign].[Campaigns].[Campaign].&[107049]") 
'and so on 
End Sub 

Вся помощь ценится

+0

Вопрос - это 106679, 106680, 107049 все предметы в сводной области 'Кампания'? –

+0

@ShaiRado да, на этот раз, но время NeXT мне нужно изменить кампанию, возможно, более или менее выбранные элементы – krib

+0

см. Мой ответ ниже, он не включает настройку сводной таблицы и полей, только фильтрацию предметов, которые вы запросили во всех Сводные таблицы –

ответ

0

ниже код перебирает все сводные таблицы имен pvtTblNameArr (массив), в имени листа "SheetPivot" (изменить в соответствии с вашим именем листа).

Option Explicit 

Sub GetPivotFilter() 

Dim PvtTbl    As PivotTable 
Dim pvtitem    As PivotItem 
Dim pvtFld    As PivotField 
Dim pvtTblNameArr()  As Variant 
Dim i     As Integer 

' modify this array to all PivotTable names you need to modify (in the same sheet) 
pvtTblNameArr() = Array("Pivottabell4", "Pivottabell8") 

' loop though Pivot Table Names 
For i = LBound(pvtTblNameArr) To UBound(pvtTblNameArr) 

    ' change "SheetPivot" to your sheet name 
    Set PvtTbl = ThisWorkbook.Sheets("SheetPivot").PivotTables(pvtTblNameArr(i)) 

    ' set Pivot field variable to "Campaign" 
    Set pvtFld = PvtTbl.PivotFields("Campaign") 

    ' lop through all Pivot Items in "Campaign" Pivot Field 
    For Each pvtitem In pvtFld.PivotItems 

     Select Case pvtitem.Name 
      Case 106679, 106680, 107049 
       pvtitem.Visible = True 

      Case Else 
       pvtitem.Visible = False 

     End Select 

    Next pvtitem 

Next i 

End Sub 
+0

Это решает часть ** 2 **, и это помогает. Получите «ошибку времени выполнения 1004» здесь: 'Установить pvtFld = PvtTbl.PivotFields (« Кампания »)'. Не могу получить атрибут PivotFields для класса PivotTable – krib

+0

@krib Вы можете уточнить? когда вы получили эту ошибку? после того, как он работает нормально на 1 Pivot? не все ? Все ли ваши сводные таблицы находятся на одном листе? –

+0

Я попытался пройти через него (пытаясь научиться) и получил эту ошибку на этой линии, прежде чем что-либо изменилось. Не все в одном листе, но я могу понять. – krib

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