2016-03-15 56 views
1

我有一个数据集需要在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 

问题是否出现这样的事实,即我先按月对这些项目进行分组?

+1

如果你删除这行'.PivotItems(“(blank)”)。Visible = True' does it work? –

+0

这没有奏效。我终于决定在数据透视前对数据进行预格式化,并删除空白数据的行。这种方式空白不会被创建,因为我只是将它们滤掉。我仍然想看看是否有人知道为什么这不起作用。 – Zionmoose

+0

我刚刚测试过这段代码,不能重现问题。然后我从数据中删除了所有空白行并再次进行了测试,结果在'.PivotItems(“(blank)”)。Visible = True'行失败,但在For循环中没有失败。我希望这个测试可以帮助你。 –

回答

-1

我想你可以得到你的答案,如果你打开宏记录器,并点击你的鼠标的步骤。尝试一下,看看它是否给你你想要的。

+0

我没那个。这是让我到上面的代码。录音机失败了我,它不会做我需要的。不过谢谢。 – Zionmoose

0

我的解决方案可能不是最优雅的,但您必须将透视项目的可见值更改为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" 

希望有所帮助。