首页 > 解决方案 > 自动更改枢轴过滤器的宏不起作用

问题描述

我有一个包含几个数据透视表的报告,这些数据透视表运行生产数据、订单和交货。我每天运行它,然后更改报告中的过滤器以选择所有交货编号,然后取消选择空白交货编号。

换句话说,我只选择那些包含交货编号的订单。如果交货编号为空白,则订单尚未设置为发货。

    ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #").CurrentPage = _
        "(All)"
    With ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #")
        .PivotItems("(blank)").Visible = True
    End With
    ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #").CurrentPage = _
        "(All)"
    With ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #")
        .PivotItems("(blank)").Visible = False
    End With
End Sub

我想让它进入并选择所有的交货号码,除了空白交货号码。

截屏

似乎无法选择“全部”,并且只选择了前一天之前选择的内容。

标签: excelvbafilterpivotpivot-table

解决方案


如何显示除空白之外的每个 PivotItem

如果PivotTables().PivotFields().EnableMultiplePageItems设置为True,则无法通过设置来选择所有PivotItems (尽管宏记录器仅记录!)。PivotFields.CurrentPage="(All)"

要选择所有数据透视项,只需使用PivotField.ClearManualFilterPivotField.ClearAllFilters(在数据透视字段上,而不是偶然在数据透视表上!)。之后,您可以隐藏(取消选择)空白的。

With WorkSheet.PivotTables(...).PivotFields(...)
    .ClearManualFilter    ' or ClearAllFilters
    If .PivotItems.Count > 1 Then   ' at least 1 has to remain visible
        .PivotItems("(blank)").Visible = False
    End If
End With

错误处理
至少一个 PivotItem 必须保持可见。如果只有空白并且您尝试隐藏它们,您将收到错误消息。
如果也没有空格,那么您会收到一个错误,您应该使用 捕获该错误,On Error Resume Next或​​者您可以先遍历所有项目以检查其中一个是否称为“(空白)”。仅检查最后一个 PivotItem 的名称(如)是不够的If .PivotItems(.PivotItems.Count).Name = "(blank)",因为它不一定是最后一个条目。

您的示例应与此一起使用:

With ActiveSheet.PivotTables("PivotTable5").PivotFields("Del #")
    .ClearManualFilter
    If .PivotItems.Count > 1 Then   ' at least 1 has to remain visible
        .PivotItems("(blank)").Visible = False
    End If
End With

也许你需要ActiveSheet.PivotTables("PivotTable5").RefreshTable每天额外。

反过来:如何只显示空白的 PivotItems

如果EnableMultiplePageItems = Trueand one or many 被选中,但不是空白的,则CurrentPage = "(blank)"引发错误。您必须首先启用空白页面,方法是清除上面的过滤器或使空白额外可见,然后您可以选择仅包含空白页面的页面:

WorkSheet.PivotTables().PivotFields().PivotItems("(blank)").Visible = True
WorkSheet.PivotTables().PivotFields().CurrentPage = "(blank)"

推荐阅读