Я пытаюсь динамически обновлять некоторые сводные таблицы в Excel. Сводные таблицы (и подключенные слайсеры - каждый слайсер подключается к нескольким опорным точкам) уже существуют, в таблице исходных данных нет. Процесс следующим образом:Неверный вызов процедуры или аргумент - попытка динамического изменения сводного кеша
- Создать новую таблицу для хранения необработанных данные
- Заполнить листа, обернуть данные в ListObject (таблицу)
- Создать новый кэш поворота из новых данных
- Unlink в ломтерезки из сводных таблиц
- Изменение кэш-памяти сводных таблиц на новый кэш
- Обновить поворотные столы
- Ссылка на ломтерезки назад вверх
- Удалить данные листа
Чтобы уточнить структуру: исходную таблицу Один данных. Несколько сводных таблиц, указывающих на источник. Несколько ломтерезки, каждый из которых соединен со всеми сводными таблицами (например, неделя Окончание ломтерезки chages неделя Окончание на всех шарнирах)
Я бегу в проблему, однако с шага 4. Следующий код работает:
'dataTable is a ListObject that was created on a sheet earlier in the function. Can confirm 100% that it exists and is populated.
Dim pt As PivotTable
For Each pt in PivotSheet.PivotTables
pt.ChangePivotCache ThisWorkbook.PivotCaches.Create(_
SourceType:=xlDatabase, _
SourceData:=dataTable)
Next pt
Однако это означает, что один сводный кэш на каждую сводную таблицу, что означает, что я сталкиваюсь с проблемами при попытке настроить slicers, которые управляют несколькими опорными точками - он предполагает, что каждая сводная таблица имеет другой источник данных, и поэтому позволит мне привяжите слайсер к единственному стержню.
Я решил, что путь к созданию будет заключаться в создании единого сводного кеша, а затем привязать каждую сводную таблицу к нему. Этот код, однако, не работает, выбрасывая error 5
у меня в первый раз, когда он достиг:
'dataTable is a ListObject that was created on a sheet earlier in the function. Can confirm 100% that it exists and is populated.
Dim pc As PivotCache
Set pc = ThisWorkbook.PivotCaches.Create(_
SourceType:=xlDatabase, _
SourceData:=dataTable)
Dim pt As PivotTable
For Each pt in PivotSheet.PivotTables
pt.ChangePivotCache pc 'Invalid Procedure Call Or Argument
Next pt
Что я делаю неправильно здесь?
Да, это сделал , На самом деле, к настоящему времени следует ожидать, что все, что кажется простым в VBA, будет состоять из 10 дополнительных строк объявлений с переменными переменными, отслеживания состояния и блока If-Else. Ура! – Kai