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