使用VBA在Excel OLAP过滤器中迭代子项

时间:2018-05-03 09:04:42

标签: excel-vba olap-cube vba excel

我有一个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

每个循环都不起作用。我试图找出如何遍历Cost Center Code5中存在的所有子项。

谢谢!

1 个答案:

答案 0 :(得分:0)

在Excel 2010中,我发现仅选择一项时,Select Multiple Items为0。因此不会执行任何循环。

即使您的过滤器已选中Select Multiple Items,情况也是这样。换句话说,您需要选择PivotTables("x").PivotFields("y").PivotItems 一个以上的项目,以便可以遍历集合。非常烦人。

您可以按照MS documentation按照以下PivotItem的方式访问您选择的一个项目,但是我发现,如果我尝试将该方法分配给PivotItems变量,则会得到一个类型不匹配。与文档相反,该方法每次都返回{{1}}类型。不幸的是,当只有一个选定的项目时,它的计数为零,因此您无法对其进行检查。