数据透视表如何将过滤器中的所有项设置为false?

时间:2015-03-30 21:27:08

标签: excel excel-vba vba

我有一个MS Excel宏来创建数据透视表。在数据透视表中我想过滤多个项目。因此,首先需要将所有项目设置为false,然后将要包含的项目设置为true。所以目前我有:

With ActiveSheet.PivotTables("PivotTable2").PivotFields("Test Cycle")
    .PivotItems("FXA BI_MH Pre UAT C1").Visible = False
    .PivotItems("FXA BI_MH Pre UAT C2").Visible = False
    .PivotItems("FXA Reg C1").Visible = False
    .PivotItems("MC3").Visible = False
    .PivotItems("PT Cycle 1").Visible = False
    .PivotItems("Regression Test (APO)").Visible = False
    .PivotItems("SIT CR").Visible = False
    .PivotItems("SIT Cycle 2").Visible = False
    .PivotItems("UAT - Data Conv").Visible = False
    .PivotItems("UAT Pre-Test - Additional").Visible = False
    .PivotItems("UAT Pre-Test - Final").Visible = False
    .PivotItems("UAT Pre-Test - Iteration 2").Visible = False
End With
ActiveSheet.PivotTables("PivotTable2").PivotFields("Test Cycle"). _
    EnableMultiplePageItems = True

然而,"测试周期"项目更改,如果引入了新项目,它会自动包含,因为我没有将其设置为false。有没有办法将所有选择设置为false,类似(这不起作用):

With ActiveSheet.PivotTables("PivotTable2").PivotFields("Test Cycle")
    .PivotItems("(All)").Visible = False
End With
ActiveSheet.PivotTables("PivotTable2").PivotFields("Test Cycle"). _
    EnableMultiplePageItems = True

在@Josh的帮助下,我有:

ActiveSheet.PivotTables("PivotTable2").PivotFields("Test Cycle"). _
        EnableMultiplePageItems = True
    With ActiveSheet.PivotTables("PivotTable2").PivotFields("Test Cycle")
        For i = 1 To .PivotItems.Count - 1
            If .PivotItems(i).Name <> "UAT Pre-test (FXA)" _
                And .PivotItems(i).Name <> "UAT C2 (FXA)" Then
                .PivotItems(.PivotItems(i).Name).Visible = False
            End If
        Next i
    End With

1 个答案:

答案 0 :(得分:4)

不要手动列出每个项目,而是尝试使用以下内容关闭过滤器:

With ActiveSheet.PivotTables("PivotTable2").PivotFields("Test Cycle")
    For i = 1 To .PivotItems.Count - 1
        .PivotItems(.PivotItems(i).Name).Visible = False
    Next i
End With

请注意,使用excel界面时,必须至少选择1个项目才能保存过滤器。

Excel Pivot Table Filter requires at least one value