Используйте VBA для обновления сводных таблиц - PullRequest
0 голосов
/ 13 февраля 2019

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

Я использую следующий код VBA для обновления сводных таблиц после дампа данных.

Private Sub CommandButton1_Click()


With ThisWorkbook.Worksheets("Analysis")

.PivotTables("PivotTable1").RefreshTable
.PivotTables("PivotTable2").RefreshTable

End With

Sheets("Output").Activate

End Sub

Проблема заключается в том, что всякий раз, когда у меня появляется новый дамп данных на листе 1, а затем выполняется код, Я получаю следующее сообщение: В [Документе1] уже есть данные для анализа.Вы хотите заменить его? После этого выходные данные из сводных таблиц неверны, и предположительно статических сводных фильтров больше нет.

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

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

Это хороший способ перебрать все рабочие таблицы и обновить все сводные таблицы:

Dim ws As Worksheet
Dim pt As PivotTable

For Each ws In wb.Sheets
  For Each pt In ws.PivotTables
    pt.PivotCache.Refresh
  Next pt
Next ws

Конечно, вы можете легко наложить ограничения, если хотите исключить какие-либо рабочие таблицы или сводные таблицы.Приятно то, что он не только делает все таблицы в блоках (по листам), но если таблицы добавляются, удаляются или переименовываются, он не падает при поиске определенных таблиц.

0 голосов
/ 13 февраля 2019

Не используйте ActiveSheet.По моему мнению, лучше использовать создание с указанием ссылки на лист, который вы хотите, и использовать обновить все вместо одного за другим.

Option Explicit

Sub test()

    With ThisWorkbook.Worksheets("Sheet1")

        .RefreshAll

    End With

End Sub
...