使用excel中的按钮在数据透视表中自动设置过滤器

使用excel中的按钮在数据透视表中自动设置过滤器,excel,button,filter,pivot-table,Excel,Button,Filter,Pivot Table,如果我在excel中按下表单控件按钮,是否有一个快速宏可以自动为我设置透视表中的过滤器?我对vba和宏没有任何经验,我尝试录制了一个,但当其中一个轴未设置为与录制宏时最初设置的过滤器相同的过滤器时,它会出错 下面是它的代码: Sub Filter_Foot() ' ' Filter_Foot Macro ' Application.ScreenUpdating = False ActiveSheet.PivotTables("PivotTable3").PivotFields

如果我在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

这是很多代码。重构可能更容易发现问题:

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

我认为录制宏是最好的选择。我不认为录制的宏的代码会使用较慢的命令-因此可能还有其他一些原因会使您的速度变慢。请尝试关闭屏幕更新,然后在更改8个轴后将其重新设置…设置
应用程序。屏幕更新
很可能会有很大帮助(并且对您来说已经足够了)!但是,如果仍然太慢,则可能是录制的宏正在运行一些低效的代码。如果你想用你所拥有的代码编辑你的文章,我们可能可以对其进行一点编辑来帮助你。好的,Application.screenUpdated确实帮助了你提高了速度-谢谢你!但是,我遇到了一个错误,我认为这是由于没有将过滤器设置为我录制宏时最初设置的过滤器。我将编辑我的帖子以包含宏的代码。谢谢你们的帮助,伙计们。