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

Posted

技术标签:

【中文标题】Excel 2013 - 在基于 OLAP 的数据透视表上更改页面过滤器时记录的宏错误【英文标题】:Excel 2013 - recorded macro errors when changing page filter on OLAP based pivot table 【发布时间】:2017-08-30 07:14:57 【问题描述】:

这是录制的宏:

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】:

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

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 引用。这将导致您出现问题。我建议也命名您的数据透视表。哎呀,说出你使用的任何东西。它使您的代码更易于阅读。

【讨论】:

嗨,布兰登,感谢您的回复。这是记录的代码。当我尝试运行它时它会出错。 ActiveSheet.PivotTables("PivotTable1").PivotFields(_"[Location].[Sales Region - Location].[Sales Region]").ClearAllFilters ActiveSheet.PivotTables("PivotTable1").PivotFields(_"[Location].[销售区域 - 位置].[销售区域]").CurrentPage = _ "[位置].[销售区域 - 位置].[销售区域].&[Craig]" @ScanGuard 是否设置了EnableMultiplePageItems = False?另外,你确定CraigSales Region 维度中吗? 嗨,布兰登。代码与实际记录的一样,所以是的,克雷格在维度中。 EnableMultiplePageItems 复选框未勾选。 嗨,布兰登。代码与实际记录的一样,所以是的,克雷格在维度中。 EnableMultiplePageItems 复选框未勾选。 @ScanGuard PageField.CurrentPage 属性仅在 .EnableMultiplePageItems 首次设置为 false 时有效。还要确保您正在处理页面字段而不是其他类型的字段(例如行字段)。页面字段显示在左上角的数据透视表上方。我还建议使用即时窗口和断点来尝试获取数据透视表的CurrentPage。在将宏与 OLAP 多维数据集一起使用时,调试工具将有很大帮助。

以上是关于Excel 2013 - 在基于 OLAP 的数据透视表上更改页面过滤器时记录的宏错误的主要内容,如果未能解决你的问题,请参考以下文章

Excel 中显示的 OLAP 多维数据集连接

在 Excel 中的 OLAP 多维数据集中搜索

Excel 多维数据集 - OLAP?

在 Excel 中查看 OLAP 多维数据集详细信息

Excel 2013 - VBA AddDataFiled 1004 错误

OLAP进阶:Excel可直接分析的大数据语义层