Используя некоторые примеры, которые я нашел в Интернете, я написал следующий VBA, который выполняет то, что мне нужно. Я разместил на сводной странице пустую сводную таблицу и кнопку, связанную с этим макросом, которая обновляет все другие сводные таблицы с теми же фильтрами.
ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ: Это не будет работать для полей, в которых выбрано «(Все)». Мне не нужно было заглядывать, но можно изменить следующий код, добавив поддержку «(Все)».
Sub UpdateAllPivotTables()
Dim ws As Worksheet
Dim wsMain As Worksheet
Dim ptMain As PivotTable
Dim pt As PivotTable
Dim pfMain As PivotField
Dim piMain As PivotItem
Dim pi As PivotItem
Dim pf As PivotField
Dim hadError As Boolean
On Error Resume Next
Set wsMain = ActiveSheet
Set ptMain = ActiveSheet.PivotTables(1)
Application.EnableEvents = False
For Each ws In ThisWorkbook.Worksheets
If (Not (ws.Name = wsMain.Name)) Then
ws.Unprotect
For Each pt In ws.PivotTables
pt.ManualUpdate = True
For Each pf In pt.PageFields
For Each pi In pf.PivotItems
If (Not (pi.Visible = ptMain.PageFields(pf.Name).PivotItems(pi.Name).Visible)) Then
pi.Visible = ptMain.PageFields(pf.Name).PivotItems(pi.Name).Visible
End If
Next pi
Next pf
pt.ManualUpdate = False
Next pt
'ws.Protect
End If
Next ws
Application.EnableEvents = True
End Sub