我有一份包含几个数据透视表的报告,用于记录生产数据、订单和交货情况。我每天运行它,然后更改报告中的过滤器以选择所有交货编号,然后取消选择空白交货编号。
换句话说,我只选择那些包含交货编号的订单。如果交货编号为空,则订单尚未设置为发货。
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
我希望进入并选择除空白交货编号之外的所有交货编号。
似乎无法选择“全部”,只选择了前一天选择的内容。
如果
PivotTables().PivotFields().EnableMultiplePageItems
设置为 True
,则无法通过将 PivotFields.CurrentPage
设置为 ="(All)"
来选择所有PivotItems(尽管宏记录器仅记录这一点!)。
要选择所有数据透视项,只需使用
PivotField.ClearManualFilter
或 PivotField.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 必须保持可见。如果有only空白并且您尝试隐藏它们,您会收到错误。
如果也没有 no 空白,那么您会收到一个错误,您应该使用
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
。
如果选择了
EnableMultiplePageItems = True
和一个或多个,但不是空白的,则 CurrentPage = "(blank)"
会引发错误。
您必须首先启用空白页面,可以通过像上面一样清除过滤器或使空白另外可见,然后您可以选择仅包含空白页面:
WorkSheet.PivotTables().PivotFields().PivotItems("(blank)").Visible = True
WorkSheet.PivotTables().PivotFields().CurrentPage = "(blank)"