Обновление фильтра сводной таблицы с помощью VBA - PullRequest
0 голосов
/ 29 марта 2019

Я пытаюсь отфильтровать сводную таблицу на основе фильтра другой сводной таблицы на другом листе с другим источником данных.

У меня есть два листа (Main и Size Actual - Style), и я хочу отфильтровать по «Style». На главном листе я хочу выбрать стили для фильтрации, а оттуда я хочу обновить другой лист с отфильтрованными выбранными стилями (это помогло бы, если бы фильтрация происходила с помощью кнопки). Я изменил некоторый код для учета поля (стиля), по которому я хочу фильтровать. Прямо сейчас у меня сбрасывается сводная таблица Главного листа, чтобы показать все значения при выборе фильтра по стилю в разделе Размер Фактический - Стиль. Мне нужно, чтобы это было переключено, и вместо очистки фильтра я хочу обновить его с выбранными стилями из фильтра.

Option Explicit
Private Sub Worksheet_PivotTableUpdate(ByVal Target As PivotTable)
On Error Resume Next
Dim wsMain As Worksheet
Dim ws As Worksheet
Dim ptMain As PivotTable
Dim pt As PivotTable
Dim pfMain As PivotField
Dim pf As PivotField
Dim pi As PivotItem
Dim bMI As Boolean

On Error Resume Next
Set wsMain = ActiveSheet
Set ptMain = Target

Application.EnableEvents = False
Application.ScreenUpdating = False

For Each pfMain In ptMain.PageFields
bMI = pfMain.EnableMultiplePageItems
For Each ws In ThisWorkbook.Worksheets
    For Each pt In ws.PivotTables
        If ws.Name & "_" & pt <> wsMain.Name & "_" & ptMain Then
            pt.ManualUpdate = True
            Set pf = pt.PivotFields("Style")
                    bMI = pfMain.EnableMultiplePageItems
                    With pf
                        .ClearAllFilters
                        Select Case bMI
                            Case False
                                .CurrentPage = pfMain.CurrentPage.Value
                            Case True
                                .CurrentPage = "(All)"
                                For Each pi In pfMain.PivotItems
                                    .PivotItems("Style").Visible = 
pi.Visible
                                Next pi
                                .EnableMultiplePageItems = bMI
                        End Select
                    End With
                    bMI = False

            Set pf = Nothing
            pt.ManualUpdate = False
        End If
    Next pt
Next ws
Next pfMain

Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

Я пытаюсь, чтобы фильтр на втором листе обновил свой фильтр на основе выбора на фильтре стиля первых листов.

...