从VBA

时间:2017-08-07 17:24:44

标签: excel-vba pivot-table vba excel

我正在尝试删除" 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"

非常感谢任何可以提供帮助的人

1 个答案:

答案 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)