Я пытаюсь подключить слайсер к нескольким сводным таблицам, используя метод, описанный здесь: http://dailydoseofexcel.com/archives/2014/08/05/slicers-and-slicercaches/
Сначала я перебираю свои сводные таблицы и создаю срез для каждой из них:
wkbDash.SlicerCaches.Add(wksPivots.PivotTables(sPTName), sSlicerName). _
Slicers.Add wksSlicers, , sSlicerName, sSlicerName, 1, 1, 50, 100
Затем я перебираю свои слайсеры и пытаюсь подключить их к каждой сводной таблице
Проблема: я получаю сообщение об ошибке # 424 «Требуется объект» в этой строке:
wkbDash.SlicerCaches(objSlicer).PivotTables.AddPivotTable
(wksPivots.PivotTables(varPTNames(i, 1)))
Код для подключения слайсеров к сводным таблицам:
' Declarations
Dim objSlicerCache As SlicerCache
Dim objSlicer As Slicer
Dim objPT As PivotTable
Dim varPTNames As Variant
Dim wksDefPivots As Worksheet
Dim wkbDash As Workbook
Dim i As Integer
' Initialize Variables
Set wkbDash = Workbooks(sDash)
Set wksDefPivots = Workbooks(sDash).Worksheets(sDefPivots)
varPTNames = wksDefPivots.Range("A2:A" & FindLastRow(wksDefPivots)).Value2
i = 0
' Procedure
For Each objSlicerCache In Workbooks(sDash).SlicerCaches
For Each objSlicer In objSlicerCache.Slicers
For i = LBound(varPTNames) To UBound(varPTNames)
wkbDash.SlicerCaches(objSlicer).PivotTables.AddPivotTable (wksPivots.PivotTables(varPTNames(i, 1)))
Next i
Next objSlicer
Next objSlicerCache
Основываясь на комментариях Боба, я изменил цикл, чтобы попытаться подключить сводные таблицы к объекту SlicerCache вместо слайсера.Я все еще получаю сообщение об ошибке № 424 «Требуется объект»
Пересмотренный цикл:
For Each objSlicerCache In Workbooks(sDash).SlicerCaches
For j = LBound(varPTNames) To UBound(varPTNames)
objSlicerCache.PivotTables.AddPivotTable (wksPivots.PivotTables(varPTNames(j, 1)))
Next j
Next objSlicerCache
Основное обновление: Я пересмотрел код и очень близок.Новая последовательность кода:
1. Создайте 1 PivotCache
2. Используйте PivotCache для создания многих сводных таблиц
3. Создайте 1 SlicerCache из первой сводной таблицы
4. Добавьте дополнительные сводные таблицы в SlicerCache
5. Циклчерез каждую сводную таблицу в SlicerCache и создайте срез.
Хорошая новость: весь этот код работает.Он создает много слайсеров, и каждый слайсер фильтрует все сводные таблицы
Проблема: Все слайсеры фильтруют только одно поле (см. Изображение), а не каждый слайсер, предоставляющий отдельное поле дляфильтр.
Код:
For Each objSlicerCache In wkbDash.SlicerCaches
objSlicerCache.Delete
Next objSlicerCache
sRF = Worksheets(sDefPivots).Range("B2").Value
sPT = Worksheets(sDefPivots).Range("A2").Value
Set objPT = Worksheets(sPivots).PivotTables(sPT)
Set objPF = Worksheets(sPivots).PivotTables(sPT).PivotFields(sRF)
Set objSlicerCache = wkbDash.SlicerCaches.Add(objPT, objPF.Name)
Set objPT = Nothing
Set objPF = Nothing
For Each objPT In Worksheets(sPivots).PivotTables
objSlicerCache.PivotTables.AddPivotTable objPT
Next objPT
For Each objSlicerCache In wkbDash.SlicerCaches
For Each objPT In objSlicerCache.PivotTables
objSlicerCache.Slicers.Add wksSlicers, , objPT.Name, objPT.Name, 1, 1, 50, 100
Next objPT
Next objSlicerCache
Снимок экрана фильтров