Обновление сводных таблиц

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

Sub RefreshPivotTables() Dim pivotTable As PivotTable For Each pivotTable In ActiveSheet.PivotTables pivotTable.RefreshTable Next End Sub 

Хотя такой ответ может дать ожидаемый результат, он может сделать это по невероятной цене.

У меня большой рабочий лист; 11 столбцов на 771427 строк. Затем весь рабочий лист определяется как исходные данные для трех сводных таблиц на один столбец в каждом из трех дополнительных листов (они выполняют различные виды анализа). У меня около 199 сводных таблиц.

Если я использую кнопку «Обновить все» в меню «Данные», процесс обновления занимает много, много часов. Без отчета о проделанной работе, чтобы объяснить причину, по которой или подтвердить, что Excel не висел, я прибегал к созданию кода VBA, чтобы сначала перечислить сводные таблицы в новом листе, а затем, один за другим, обновить номинированную сводную таблицу. Обновляя листинг, я вижу теперь прогресс.

Однако недавно я наткнулся на изменение набора данных, из-за которого я вручную обновил только одну из своих сводных таблиц, и, к моему ужасу, все сводные таблицы были обновлены – через несколько минут, а не в часах.

Дальнейшее тестирование с помощью кода VBA для пропуска метода .RefreshTable если имена PivotTable и Worksheet не были теми, которые я хотел обновить ( см. Ниже ), привели меня к мысли, что метод .RefreshTable обновляет все .RefreshTable таблицы – либо все на этом листе , все в книге, или, возможно, только все, которые используют одни и те же исходные данные. Кроме того, я считаю, что Microsoft имеет ту же проблему, когда вы нажимаете кнопку «Обновить все».

 Sub RefreshPivotTables() Dim Pt As PivotTable Dim St As Worksheet For Each St In ActiveWorkbook.Worksheets For Each pt In St.PivotTables If pt.Name = "PivotTable151" And St.Name = "Sheet3" Then Set pvtTable = pt.TableRange1.PivotTable pvtTable.RefreshTable End If Next Next End Sub 

Я использую Excel 2010. Так что здесь происходит? Как можно улучшить вышеупомянутый ответ, чтобы сэкономить на повторных обновлениях?

Может быть, я тоже что-то упустил, но вы говорите

 For Each pivotTable In ActiveSheet.PivotTables 

поэтому, конечно, он обновит все, что связано с этим листом.

Можем ли мы увидеть код, с которым вы играли, чтобы не обновлять определенные файлы?

Также вы пробовали:

Sheets("SHEET_NAME").PivotTables("PIVOT_TABLE_NAME").PivotCache.Refresh

Источник

Interesting Posts

MIN IF с несколькими критериями Excel (верните раннюю дату, если)

Программирование VBA в Excel без использования ActiveCell

Как анализировать изменения во времени в Excel?

Как вставлять гиперссылки из одного файла excel в текст из другого файла excel с помощью powershell

Excel возвращает последнее изменение ячейки

Excel в XML: увеличение производительности

Вызовы пользователей в нескольких модулях

Преобразование временной отметки на сегодняшний день в excel и SAS import

экспорт в excel из ajax-запроса asp.net MVC kendo UI

Функция соответствия VBA и вложенные для поиска

POI, JAVA: возникла ошибка «Неожиданный класс ptg» при попытке оценить формулу ячейки с помощью Apache POI

Как заблокировать тип соответствия из другой таблицы из формулы соответствия Excel?

VBA InputBox запрашивает дважды

Формула Excel: ненужные дополнительные шаги в процессе SUMIF

Несколько условий с условным форматированием

Давайте будем гением компьютера.