Запретить Excel обновлять сводную таблицу, пока VBA не скажет об этом

У меня есть шаблон Excel (.xlt), который содержит рабочий лист для данных отчета и 4 рабочих листа со сводными таблицами.

Когда наша система отчетности создает отчет и применяет к нему шаблон, некоторые поля, на которые ссылаются сводные таблицы, не существуют, поскольку для их создания запускается макрос как часть процесса системы отчетности.

Однако, поскольку эти поля не существуют, Excel выдает ошибку (Произошла ошибка при доступе к свойству/методу компонента: ОБНОВИТЬ. Ссылка недействительна.). Чтобы попытаться предотвратить это, я отключил параметр во всех сводных таблицах для Refresh data when opening the file.

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

Function UpdatePivots()
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable1").PivotCache.Refresh
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable2").PivotCache.Refresh
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable3").PivotCache.Refresh
    ActiveWorkbook.Sheets("DJG Marketing - Client List by ").PivotTables("PivotTable4").PivotCache.Refresh
End Function

person David Gard    schedule 28.09.2012    source источник


Ответы (1)


вот что вам нужно:

' Disable automatic calculation
Application.Calculation = xlCalculationManual
' do regular operation here
' Force a calculation
Application.Calculate
' Then remember to run automatic calculations back on
Application.Calculation = xlCalculationAutomatic

взято с: http://www.zerrtech.com/content/stop-vba-automatic-calculation-using-applicationcalculation-manual

person Alex Gordon    schedule 28.09.2012
comment
Application.Calculate не нужен. Application.Calculation = xlCalculationAutomatic не только вернет настройку, но и вычислит, когда она будет вызвана. - person Ryszard Jędraszyk; 01.05.2017