Excel 2013 - 在基于OLAP的数据透视表上更改页面筛选器时记录的宏错误

时间:2017-08-30 07:14:58

标签: excel excel-vba pivot olap vba

这是录制的宏:

ActiveSheet.PivotTables("PivotTable1").PivotFields( _
    "[Location].[Sales Region - Location].[Sales Region]").ClearAllFilters
ActiveSheet.PivotTables("PivotTable1").PivotFields( _
    "[Location].[Sales Region - Location].[Sales Region]").CurrentPage = _
    "[Location].[Sales Region - Location].[Sales Region].&[some name]"

出于帖子的目的,我已将实际名称更改为“某个名称”。

我记录了那个宏,然后尝试运行它。我收到一个错误:

  

无法设置PivotField类的CurrentPage属性

我查看了其他建议使用

的帖子
Dim pt As PivotTable
Dim NewRSM As String

NewRSM = "some name"

Set pt = ActiveSheet.PivotTables("PivotTable1")

With pt
    .PivotFields("[Location].[Sales Region - Location].[Sales Region]").ClearAllFilters
    .PivotFields("[Location].[Sales Region - Location].[Sales Region]").CurrentPage = NewRSM
End With

pt.RefreshTable

这也失败了。

1 个答案:

答案 0 :(得分:0)

这太简单了。在发布答案之前,我强烈建议您在将来尝试更多地调试代码。你的问题是你试图连接两个字符串,但你永远不会关闭第一个字符串。例如:

Dim Foo as String
Foo = "Apples"

Debug.Print "I like Foo!"
Debug.Print "I Like " & Foo & "!"

尝试一下,看看你是否可以破译正在发生的事情。

现在为解决方案。同样的方法,小修复:

ActiveSheet.PivotTables("PivotTable1").PivotFields( _
"[Location].[Sales Region - Location].[Sales Region]").CurrentPage = _
"[Location].[Sales Region - Location].[Sales Region].&[" & SomeName & "]"

瞧!要连接字符串,必须以与在别处使用它相同的方式使用该变量。也就是说,将变量放在引号之外,并将这些部分连接在一起。

值得注意的是,只有pt.EnableMultiplePageItems = FalsePivotFieldPageField时,这两项才有效。此外,您的第二个版本不起作用的原因是OLAP多维数据集无法识别"some name"。它必须知道整个维度,例如"[Foo].[Bar].[Baz].[Item]"

虽然我在这里,但强烈建议您避免使用ActiveSheet参考。这将导致你的问题。我也建议命名您的数据透视表。哎呀,说出你用的任何名字。它使您的代码更易于阅读。