Excel vba: создание макроса для подключения среза к нескольким сводным таблицам

Я пытаюсь создать макрос, который изменит источник данных для трех сводных таблиц. Затем один срез, который уже находится на листе, будет подключен ко всем трем сводным таблицам. Все сводные таблицы будут брать свои данные из одного места.

Когда я пытаюсь это сделать, я получаю сообщение об ошибке на этапе подключения среза к сводным таблицам 2 и 3. Если я запускаю макрос только с шагами для изменения источника данных для каждой сводной таблицы, я заметил, что срез имеет только один в поле «Сообщать о подключениях» вместо 3.

Вот что у меня есть:

Sheets("Sales").Select
ActiveSheet.PivotTables("PivotTable1").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Table3", Version _
:=xlPivotTableVersion15)

ActiveSheet.PivotTables("PivotTable2").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Table3", Version _
:=xlPivotTableVersion15)

ActiveSheet.PivotTables("PivotTable3").ChangePivotCache ActiveWorkbook. _
PivotCaches.Create(SourceType:=xlDatabase, SourceData:="Table3", Version _
:=xlPivotTableVersion15)


ActiveWorkbook.SlicerCaches("Slicer_Year").PivotTables.AddPivotTable ( _
ActiveSheet.PivotTables("PivotTable1"))
ActiveWorkbook.SlicerCaches("Slicer_Year").PivotTables.AddPivotTable ( _
ActiveSheet.PivotTables("PivotTable2"))
ActiveWorkbook.SlicerCaches("Slicer_Year").PivotTables.AddPivotTable ( _
ActiveSheet.PivotTables("PivotTable3"))

person John    schedule 01.05.2017    source источник


Ответы (1)


У меня была та же проблема, и это была последняя скобка, которая вызывала ошибку. Итак, вы должны заменить это:

ActiveWorkbook.SlicerCaches("Slicer_Year").PivotTables.AddPivotTable ( _
ActiveSheet.PivotTables("PivotTable2"))

с этим:

 ActiveWorkbook.SlicerCaches("Slicer_Year").PivotTables.AddPivotTable _
 ActiveSheet.PivotTables("PivotTable2")

Также вы можете написать свой код таким образом:

Dim WB as Workbook
Dim WS as Worksheet

Set WB = ActiveWorkbook
Set WS = WB.Sheets("Sales")

WB.SlicerCaches("Slicer_Year").PivotTables.AddPivotTable _ 
WS.PivotTables("PivotTable2")
person Krzysztof Paruzel    schedule 14.11.2017