如何使用VBA从报表筛选器中的数据透视字段获取no.of项目

时间:2016-08-02 22:41:56

标签: excel vba pivot-table

我使用以下行从"报告过滤器":MsgBox pt.PageFields(5).PivotItems.Count

获取数据透视字段中的no.of项目

但它每次都返回0。我不确定这是不是正确的方法。这个字段肯定有Pivot项目。有人能帮助我吗?

1 个答案:

答案 0 :(得分:0)

假设您想知道可见项目的数量而不仅仅是所有项目的数量,那么迭代每个项目以测试.visible状态是迄今为止最简单的方法。但这可能需要一段时间:我在http://dailydoseofexcel.com/archives/2013/11/14/filtering-pivots-based-on-external-ranges/写了一篇文章,只需阅读其中有20,000个项目的数据透视表的.visible状态需要花费1分20秒。我使用的许多数据透视表都很容易包含这些项目,所以当我编写必须在任何 PivotField上工作的代码时,我不会使用这种方法。

因此,如果您的PivotField有很多项目,那么比Doug的精细方法更简单 - 但可能更快 - 的方法是制作数据透视表的副本,删除/取消过每个字段,但感兴趣的是,将该字段的布局更改为PageField,然后计算它占用的行数。

我通常制作数据透视表的两份副本,然后使用其中一个来确定当前在该字段中可见的内容,另一个来确定

  • 过滤了什么(如果有的话)但由于应用了过滤器而不可见 在其他PivotFields上;和
  • 什么(如果有的话)未过滤且不可见

实现这一目标的代码非常复杂,并且是我建立的商业插件的一部分,所以我无法分享它。我很害怕。