Создайте процедуру для изменения всех полей страницы. Он проходит через все рабочие листы в книге, и если рабочий лист имеет сводную таблицу, он изменяет поле страницы, чтобы оно соответствовало полю страницы в сводной таблице, переданной во вспомогательную таблицу.
Sub ChangePage(pt As PivotTable)
Dim strPageValue As String
Dim wks As Worksheet
Dim ptUpdate As PivotTable
Application.ScreenUpdating = False
Application.EnableEvents = False
strPageValue = pt.PivotFields("Area").CurrentPage
For Each wks In ThisWorkbook.Worksheets
On Error Resume Next
Set ptUpdate = wks.PivotTables(1)
If Err.Number = 0 Then
On Error GoTo 0
wks.PivotTables(1).PivotFields("Area").ClearAllFilters
wks.PivotTables(1).PivotFields("Area").CurrentPage = strPageValue
End If
Err.Clear
Next wks
Application.ScreenUpdating = True
Application.EnableEvents = True
End Sub
Затем вызовите эту процедуру в самом коде рабочего листа и передайте измененную сводную таблицу:
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
Call ChangePage(Target)
End Sub
Измените имя сводного поля с «Area» на нужное вам поле страницы, например «US_Region».
Это может не подходить, если люди часто меняют структуру ваших сводных таблиц другими способами, так как это срабатывает при каждом изменении сводной таблицы, в том числе при ее обновлении. Также будет выдана ошибка, если пользователи удалят указанное поле страницы.
Однако, если сводные таблицы статичны, это может сработать.
person
dendarii
schedule
15.09.2009