Excel VBA从数据透视组中删除空白
问题描述:
我有一个数据集需要在Excel中旋转,然后行标签按月分组(行标签是日期)。我有VBA安装来完成数据透视,然后将行标签分组到几个月,但在分组到几个月后,我试图让下拉列表中的(空白)字段取消选择。我试图用录制一个宏来做这件事,那是行不通的。它只是做了像“< 11/15/15”。我发现应该适用于我的问题的代码,但我一直收到无法找到数据透视表项的错误消息。Excel VBA从数据透视组中删除空白
这是应该工作的代码。
Dim p_i As PivotItem
With ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotItems("(blank)").Visible = True
For Each p_i In .PivotItems
If p_i.Name = "(blank)" Then
p_i.Visible = False
End If
Next
End With
问题是否出现这样的事实,即我先按月对这些项目进行分组?
答
我想你可以得到你的答案,如果你打开宏记录器,并点击你的鼠标的步骤。尝试一下,看看它是否给你你想要的。
+0
我没那个。这是让我到上面的代码。录音机失败了我,它不会做我需要的。不过谢谢。 – Zionmoose
答
我的解决方案可能不是最优雅的,但您必须将透视项目的可见值更改为TRUE。然后刷新枢轴(如果自动工作簿计算被关闭),然后就可以自由地改变可见值FALSE:
With ActiveSheet.PivotTables("PivotTable1")
.PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = True
.RefreshTable
.PivotFields("Delivery Time of Actual Item").PivotItems("(blank)").Visible = False
End With
我还一种替代解决方案(甚至更少优雅):可以除去从空白值用日期过滤器枢轴:
ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotFilters.Add2 Type:=xlAfter, Value1:="1901-01-01"
这也与标签过滤器来完成(如果你有一个字符串/数字表):
ActiveSheet.PivotTables("PivotTable1").PivotFields("Delivery Time of Actual Item")
.PivotFilters.Add2 Type:=xlCaptionIsGreaterThan, Value1:="0"
希望有所帮助。
如果你删除这行'.PivotItems(“(blank)”)。Visible = True' does it work? –
这没有奏效。我终于决定在数据透视前对数据进行预格式化,并删除空白数据的行。这种方式空白不会被创建,因为我只是将它们滤掉。我仍然想看看是否有人知道为什么这不起作用。 – Zionmoose
我刚刚测试过这段代码,不能重现问题。然后我从数据中删除了所有空白行并再次进行了测试,结果在'.PivotItems(“(blank)”)。Visible = True'行失败,但在For循环中没有失败。我希望这个测试可以帮助你。 –