Я работаю с Excel для Mac 2011.

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

Вопросы:

(1) Есть ли способ переместить / продублировать / связать эти фильтры так, чтобы при изменении одного из них изменились и другие? (VBA работает для одиночных выборов сейчас, но как насчет нескольких выборов?)

(2) Есть ли способ создать единый универсальный фильтр на главной сводной странице?


РЕДАКТИРОВАТЬ: в основном, я хочу эмулировать SLICERS в Excel для Mac. Есть идеи?

1 ответ1

1

Используя некоторые примеры, которые я нашел в Интернете, я написал следующий 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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .