【问题标题】:VBA—"Error 1004: Unable to get the CurrentPage property of the PivotField class"VBA—“错误 1004:无法获取 PivotField 类的 CurrentPage 属性”
【发布时间】:2017-07-20 02:00:17
【问题描述】:

我有一个 Excel 工作簿,其中包含多个工作表,每个工作表上有多个数据透视表。我正在尝试遍历每个数据透视表并将其“报告函数”过滤器更改为从列表框中选择的用户指定值。所有数据透视表都有“报表功能”过滤器。

我有大约 50 个数据透视表,并且代码成功地更改了过滤器,除了大约 8 个数据透视表。这 8 个数据透视表的过滤器不会改变;而是返回错误“错误 1004:无法获取 PivotField 类的 CurrentPage 属性”。

为什么这段代码会为少数数据透视表返回此错误?

奇怪的是,返回此错误的数据透视表似乎完全相同。

Sub ChangePivotFilter(str As String)

Dim ws As Excel.Worksheet
Dim aWB As Excel.Workbook
Dim myPivot As Excel.PivotTable
Dim myPivotField As Excel.PivotField

Set aWB = ActiveWorkbook
For Each ws In aWB.Worksheets

    For Each myPivot In ws.PivotTables
        Set myPivotField = Nothing

        On Error Resume Next
        Set myPivotField = myPivot.PivotFields("Report Function")
        myPivotField.CurrentPage = str
    Next myPivot
Next ws

End Sub

非常感谢任何帮助!

【问题讨论】:

  • 您确定有任何结果与“报告功能”PivotFieldstr 匹配吗?在所有表格中?
  • 即使您有 On Error Resume Next,您是否也会收到该错误?
  • @Shai Rado 是的,所有数据透视表的报告函数字段中都有 str 的匹配项。
  • @Sam 我不是,不。我之前在返回错误的代码中放置了一个错误检查行。使用“On Error Resume Next”,代码不会显示错误。

标签: vba excel


【解决方案1】:

如果 PivotField 物理上不在其数据透视表上的“页面”(即“过滤器”)中,则分配给 CurrentPage 或从 CurrentPage 读取将失败:

您可以通过将其 Orientation 属性设置为 xlPageField 以编程方式将 PivotField 发送到“页面”,如下所示:

myPivotField.Orientation = xlPageField

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多