我已经搜索并尝试了所有有关如何通过引用单元格值的VBA代码过滤数据透视表的方法。该表只有一个过滤器,称为“名称”,该表是我要放在一起的计分卡的一部分,数据透视表本身被称为“数据”,工作表名为“ report”,我要引用的单元格是A5。我可以在VBA中做简单的事情,并且已经在这里和那里使用了几年了,但是这件事却让我发疯了。有人可以简单地把它分解给我吗?
答案 0 :(得分:0)
首先,如果您没有考虑VBA的几种替代方法,请使用它们。如果要让用户在单元格中键入内容或从单元内下拉菜单中进行选择,那么请记住,您可以添加切片器,然后让用户单击要在其中进行过滤的值那。或者,如果您希望用户从下拉列表中选择一个值,则可以使用第二个数据透视表(其中仅包含“名称”字段)作为PageField来“伪造”一个值,其外观和行为与Data Validation Dropdown非常相似。然后,您可以使用切片器将该枢轴连接到主枢轴。在http://dailydoseofexcel.com/archives/2014/08/16/sync-pivots-from-dropdown/上查看我的帖子
第二,在通过VBA更改.visible状态时出现警告:您希望避免通过PivotItems进行迭代,因为它很慢,如我在http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/上的大量文章中所述
此外,在对PivotItems执行任何操作时,应在代码运行时将PivotTable.ManualUpdate属性设置为TRUE,然后在完成时设置为FALSE,否则,每次更改时,PivotTable都会尝试刷新。任何物品的可见状态。
如果只过滤一项,则最好将字段移到“页面字段”区域,然后使用.CurrentPage属性立即过滤该一项。如果您不希望在“页面字段”区域中使用它,那么如果您拥有Excel 2010或更高版本,仍可以通过在视线之外的某个地方设置“主”数据透视表来快速执行此操作,从而将主字段中的感兴趣字段作为PageField,使用切片器将主数据透视表连接到PivotTable1(“从属”),然后更改母版的.CurrentPage属性,该属性随后将立即通过切片器过滤.Slave。
请参阅VBA to connect slicers (looking for improvements to code)上使用此技巧的答案。并在unable to get the visible property of the pivotitem class上查看我的答案,以获取使用上面概述的技巧过滤单个PivotItem上的数据透视表的函数。我可能需要发布一个示例,说明您如何使用它,但是现在不能。