Использование кнопок в Excel для автоматической установки фильтров в сводной таблице

Есть ли быстрый макрос, который мог бы автоматически устанавливать фильтры в сводной таблице для меня, если бы я нажимал кнопку управления формой в Excel? У меня нет опыта работы с vba и макросами, и я попытался записать один, но возникают ошибки, когда для одного из поворотов не установлены те же фильтры, которые были изначально установлены при записи макроса.

Вот код для него:

    Sub Filter_Foot()
'
' Filter_Foot Macro
'

Application.ScreenUpdating = False

    ActiveSheet.PivotTables("PivotTable3").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable3").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable2").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable2").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable4").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable4").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable1").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable1").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable5").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable5").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable6").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable6").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable7").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable7").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable8").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable8").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
    ActiveSheet.PivotTables("PivotTable9").PivotFields("MD").CurrentPage = "(All)"
    With ActiveSheet.PivotTables("PivotTable9").PivotFields("MD")
        .PivotItems("Name 1").Visible = False
        .PivotItems("Name 2").Visible = False
        .PivotItems("Name 3").Visible = False
        .PivotItems("Name 4").Visible = False
        .PivotItems("Name 5").Visible = False
        .PivotItems("Name 6").Visible = False
        .PivotItems("Name 7").Visible = False
        .PivotItems("Name 8").Visible = False
        .PivotItems("Name 9").Visible = False
        .PivotItems("Name 10").Visible = False
        .PivotItems("Name 11").Visible = False
        .PivotItems("Name 12").Visible = False
        .PivotItems("Name 13").Visible = False
        .PivotItems("Name 14").Visible = False
        .PivotItems("Name 15").Visible = False
        .PivotItems("Name 16").Visible = False
        .PivotItems("Name 17").Visible = False
        .PivotItems("Name 18").Visible = False
        .PivotItems("Name 19").Visible = False
        .PivotItems("Name 20").Visible = False
        .PivotItems("Name 21").Visible = False
        .PivotItems("(blank)").Visible = False
    End With
End Sub

person dootcher    schedule 03.08.2012    source источник
comment
Я думаю, что запись макроса будет лучшим вариантом. Я не думаю, что код для записанного макроса будет использовать более медленные команды, поэтому может быть какая-то другая причина, по которой он замедляется для вас.   -  person Stepan1010    schedule 03.08.2012
comment
Попробуйте отключить обновление экрана, а затем снова включить его после изменения 8 точек...   -  person Tim Williams    schedule 03.08.2012
comment
Настройка Application.ScreenUpdating скорее всего очень поможет (и вам будет достаточно)! Однако, если он все еще слишком медленный, возможно, записанный макрос выполняет какой-то неэффективный код. Если вы хотите отредактировать свой пост с помощью кода, который у вас есть, мы можем немного его отредактировать, чтобы помочь.   -  person Scott Holtzman    schedule 04.08.2012
comment
Ну, Application.ScreenUpdating конечно помог скорости - спасибо за это! Однако я столкнулся с ошибкой, которая, Я ДУМАЮ, вызвана тем, что фильтры не установлены на то, на что они были изначально установлены, когда я записывал макрос. Я отредактирую свой пост, чтобы включить код макроса. Кстати, спасибо за помощь, ребята.   -  person dootcher    schedule 04.08.2012


Ответы (1)


Это много кода. Рефакторинг может облегчить обнаружение проблемы:

Sub Filter_Foot()

    Dim pt As PivotTables
    Set pt = ActiveSheet.PivotTables

    Application.ScreenUpdating = False

    SetPF pt("PivotTable3").PivotFields("MD")
    SetPF pt("PivotTable2").PivotFields("MD")
    SetPF pt("PivotTable4").PivotFields("MD")
    SetPF pt("PivotTable1").PivotFields("MD")
    SetPF pt("PivotTable5").PivotFields("MD")
    SetPF pt("PivotTable6").PivotFields("MD")
    SetPF pt("PivotTable7").PivotFields("MD")
    SetPF pt("PivotTable8").PivotFields("MD")
    SetPF pt("PivotTable9").PivotFields("MD")

    Application.ScreenUpdating = True

End Sub

Sub SetPF(pf As PivotField)
    Dim i As Integer
    With pf
        .CurrentPage = "(All)"
        For i = 1 To 21
            .PivotItems("Name " & i).Visible = False
        Next i
        .PivotItems("(blank)").Visible = False
    End With
End Sub
person Tim Williams    schedule 03.08.2012