有没有一种方法可以宏检查是否存在特定的过滤器选项?

时间:2020-07-14 14:30:01

标签: excel vba

早上好

我正在尝试创建一个宏,该宏将根据月份,季度或年初至今的数据进行过滤。电子表格中有一个名为“ MONYR”的列,其中包括获取数据点的月份和年份。我遇到的问题是,我可能不一定总是每个月都有数据。例如,下面的代码不断触发“运行时错误'1004':无法获取PivotField类的PivotItems属性”,因为由于我缺少该数据,MONYR字段中没有“ Jan-2019”选项。有没有办法使宏检查“ Jan-2019”选项是否存在,如果不存在,则继续进行下一行而不抛出错误?

With ActiveSheet.PivotTables("PivotTable1").PivotFields("MONYR")

            .PivotItems("Jan-2019").Visible = True
            .PivotItems("Feb-2019").Visible = True
            .PivotItems("Mar-2019").Visible = True
            .PivotItems("Apr-2019").Visible = False
            .PivotItems("May-2019").Visible = False
            .PivotItems("Jun-2019").Visible = False
            .PivotItems("Jul-2019").Visible = False
            .PivotItems("Aug-2019").Visible = False
            .PivotItems("Sep-2019").Visible = False
            .PivotItems("Oct-2019").Visible = False
            .PivotItems("Nov-2019").Visible = False
            .PivotItems("Dec-2019").Visible = False
        
End With

谢谢!

1 个答案:

答案 0 :(得分:0)

使用On Error Resume Next很有用的一种罕见情况-但不要忘记添加语句On Error Goto 0

On Error Resume Next告诉VBA即使发生错误也要继续执行代码。在大多数情况下,这很糟糕,因为它隐藏了错误(并因此隐藏了代码问题)。但是,如果您确切知道特定行 会导致错误,并且可以继续,则此语句可以为您提供帮助。但是,一旦完成这些语句,您就应该将其更改回默认行为。

    On Error Resume Next    ' Skip to next line if pivot entry doesn't exist.
    .PivotItems("Jan-2019").Visible = True
    .PivotItems("Feb-2019").Visible = True
    .PivotItems("Mar-2019").Visible = True
    (...)
    On Error Goto 0