运行时错误'5':通过VBA更新报表过滤器时,无效的过程调用或参数

时间:2019-08-21 16:02:13

标签: vba runtime-error pivot-table

我正面临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个报表过滤器。 您能为我解释为什么会出现错误以及如何解决该错误吗? 谢谢

1 个答案:

答案 0 :(得分:4)

在测试中,类似这样的方法对我有用。我不相信CurrentPage期望有一个Range对象。

请注意,如注释中所指出的,您应该声明每个变量的类型。另外,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(仍然是很好的改进),因此该代码在功能上与原始代码等效,因此不再能够再现您的错误。 / p>

编辑2: 通过不专门添加.Value,尽管偶尔也会重现错误。