我正在尝试删除" countryName"中的每个国家/地区。在数据透视表中提交了列表。
然而我得到一个运行时错误1004,我认为这是因为试图消除" All"选择。我的代码如下:
With ActiveSheet.PivotTables("PivotTable1").PivotFields("countryName")
.ClearAllFilters
.EnableMultiplePageItems = True
.PivotItems("All").Visible = False
.PivotItems("GREAT-BRITAIN").Visible = False
End With
where" countyName"是这个领域 GREAT-BRITAIN是我唯一想要展示的国家
我可以手动执行此操作,但每次导入新数据时,国家/地区列表可能会有所不同,因此我想删除"所有"然后离开" GREAT-BRITAIN"
非常感谢任何可以提供帮助的人
答案 0 :(得分:1)
首先,如果您没有考虑过它们,可以选择VBA的几种替代方案。您可以使用切片器以完全相同的结果执行此操作。或者,如果您希望用户从下拉列表中选择国家/地区,则可以使用我在http://dailydoseofexcel.com/archives/2014/08/16/sync-pivots-from-dropdown/
处列出的方法我从您处理PageField的代码中的.EnableMultiplePageItems = True中取出它?如果是这样,您希望将.EnableMultiplePageItems设置为false,只需更改PageField属性即可。
With ActiveSheet.PivotTables("PivotTable1").PivotFields("countryName")
.ClearAllFilters
.CurrentPage = "GREAT-BRITAIN"
End With
否则,您将不得不遍历数据透视表中的每个项目(GREAT-BRITAIN除外)并将.visible状态设置为false,这非常慢。 (请参阅以下链接中的帖子,因为它讨论了在使用VBA过滤Pivots时如何克服瓶颈: http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/)
如果你的字段不是PageField,那么你仍然可以通过在看不见的地方设置一个'Master'数据透视表来快速完成这项工作,将感兴趣的字段作为PageField放在master中,将Master PivotTable连接到PivotTable1( 'Slave')带有切片器,并使用上面隐藏的Master上的代码片段在一个项目上立即设置PageField。然后,切片器立即将Master与Slave同步。我用这种方法 VBA to connect slicers (looking for improvements to code)