【问题标题】:Run-time error '5': Invalid procedure call or argument when updating report filter through VBA运行时错误“5”:通过 VBA 更新报告过滤器时过程调用或参数无效
【发布时间】:2019-12-26 23:01:35
【问题描述】:

我正面临这篇文章的主题在以下代码中提到的 VBA 错误:

Sub test 
Dim pt As PivotTable
Dim cp, dep As Variant
Dim Legx, DepDtex As PivotField

    Set pt = ActiveSheet.PivotTables("Main")
    Set cp = Sheets("LEGDETAILS").Range("E3")
    Set dep = Sheets("LEGDETAILS").Range("AX2")
    Set Legx = pt.PivotFields("Leg")
    Set DepDtex = pt.PivotFields("DepDte")

    With pt
    Legx.CurrentPage = cp
    DepDtex.CurrentPage = dep
    End With
        End Sub

错误出现在“with PT”之后。 代码应更改同一数据透视表的 2 个报告过滤器。 你能解释一下为什么会出现错误以及如何解决吗? 谢谢

【问题讨论】:

  • Legx.CurrentPage我认为是对象类型,所以需要Set Legx.CurrentPage = cp
  • 仅供参考 Dim Legx, DepDtex As PivotFieldDtpDtex 声明为 PivotField 对象,并将 Legx 保留为隐式 Variant - cp 同上。 cpdep 都应该声明为 As Range
  • @DavidZemens 我不确定这里的Set。在测试中,CurrentPage 没想到会出现 Range 对象。适用于范围的字符串或值。
  • @DavidZemens 现在我无法重现该错误,因为我的答案在功能上等同于 OP,除了修复变量类型并明确声明 .Value...嗯。

标签: vba runtime-error pivot-table


【解决方案1】:

在测试中,这样的事情对我有用。我不相信 CurrentPage 期望 Range 对象。

请注意,您应该声明每个变量的类型,正如 cmets 中已经指出的那样。此外,With...End With 块实际上并未被使用。

Sub test 
    Dim pt As PivotTable
    Dim cp As Range, dep As Range
    Dim Legx as PivotField, DepDtex As PivotField

    Set pt = ActiveSheet.PivotTables("Main")
    Set cp = Sheets("LEGDETAILS").Range("E3")
    Set dep = Sheets("LEGDETAILS").Range("AX2")
    Set Legx = pt.PivotFields("Leg")
    Set DepDtex = pt.PivotFields("DepDte")

    Legx.CurrentPage = cp.Value
    DepDtex.CurrentPage = dep.Value
End Sub

编辑:

不再能够重现您的错误,因为此代码在功能上与您的原始代码等效,除了声明所有变量类型并添加显式 .Value(这些都是很好的改进)。

编辑 2: 能够通过不专门添加.Value 来重现您的错误,尽管只是偶尔出现。

【讨论】:

  • 谢谢,错误消失了,但是我有一个问题。从我正在使用的新代码中,我删除了“cp”和“dep”的“set =”,但我保留了“with”块。虽然您的新代码保留了“set=”并删除了“with”块。有什么区别?是什么让一种选择比另一种更好?
  • 好的,请随时询问!
  • Set 用于Range 变量。我假设您没有将变量声明更改为 As Range 用于 cpdep?至于With...End With,这是一个不同的问题。我删除它是因为您实际上并没有使用它。如果您是,那么在With...End With 块内将有对数据透视表 的属性/方法的引用,并且该引用将以句点. 开头。你没有那样做。
  • 查看With statement 文档了解更多详情。
  • 明白。感谢您的时间和耐心。
猜你喜欢
  • 1970-01-01
  • 2018-07-25
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-04-07
相关资源
最近更新 更多