【问题标题】:Iterate through child items in Excel OLAP filter with VBA使用 VBA 遍历 Excel OLAP 过滤器中的子项
【发布时间】:2018-10-13 12:44:31
【问题描述】:

我有一个 Excel OLAP 数据透视表,上面有一个过滤器。过滤器是分层的,您可以向下钻取几个级别以查看您想要查看的内容。

我正在尝试使用 VBA 过滤到特定级别,然后遍历该级别的所有子项以执行其他操作。我的问题是弄清楚如何访问该子项列表。我可以过滤到我需要的级别,但这就是事情变得棘手的地方。

ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"[Accounts].[Business Bankers].[Cost Centre Code5]").VisibleItemsList = Array( _
"[Accounts].[Business Bankers].[Cost Centre Code5].&[" & AreaArr(i, 2) & "]")

For Each pi2 In ActiveSheet.PivotTables("PivotTable1").PivotFields( _
    "[Accounts].[Business Bankers].[Cost Centre Code6]").PivotItems
    MsgBox pi2.Caption
    MsgBox pi2.Value
    MsgBox Right(pi2.Caption, Len(pi2.Caption) - 11)
    Worksheets("Town").Copy ActiveSheet.Name = Right(pi2.Caption, Len(pi2.Caption) - 11)

Next

对于每个循环都不起作用。我试图弄清楚如何遍历成本中心代码 5 存在的所有子项目。

谢谢!

【问题讨论】:

  • 我会将这个ActiveSheet.PivotTables("PivotTable1").PivotFields( _ "[Accounts].[Business Bankers].[Cost Centre Code6]") 分配给variant,在分配之后放置一个断点,然后使用监视窗口探索对象并查看PivotItems 成员中的确切内容

标签: excel olap-cube vba


【解决方案1】:

我发现,在 Excel 2010 中,当仅选择一项时,PivotTables("x").PivotFields("y").PivotItems.Count 为 0。因此不会执行任何循环。

即使您的过滤器选中了Select Multiple Items,情况也是如此。换句话说,您需要让Select Multiple Items 选择多个项目,以便您可以遍历集合。很烦人。

您应该可以根据MS documentation 访问您的一个选定项目,如下PivotTables("x").PivotFields("y").PivotItems,但我发现如果我尝试将该方法分配给PivotItem 变量,我会得到类型不匹配。与文档相反,该方法每次都返回 PivotItems 类型。不幸的是,当只有一个选定项目时,它的计数为零,因此您无法检查它。

【讨论】:

    猜你喜欢
    • 2019-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-21
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多