我正在尝试使用 VBA 根据用户从单元格条目中的选择自动更新数据透视表过滤器。我相信一切正常,直到第 11 行显示“Field.CurrentPage = NewCat”。这就是问题所在。该代码按照上一行中的说明清除了我的过滤器,但是当它到达指示它选择新数据的代码时,我收到错误消息“运行时错误 1004。无法设置 PivotField 类的 CurrentPage 属性”。
下面是我到目前为止所拥有的,我只是在寻找如何修改第 11 行,以便它选择要在数据透视表过滤器中使用的新输入。我很感激我能得到的任何帮助。我对 vba 很陌生,并且为此苦苦挣扎了太久!
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("C3:C4")) Is Nothing Then Exit Sub
Dim pt As PivotTable
Dim Field As PivotField
Dim NewCat As String
Set pt = Worksheets("Pivot").PivotTables("PivotTable1")
Set Field = pt.PivotFields("[Range].[Site].[Site]")
NewCat = Worksheets("Interface").Range("C3").Value
With pt
Field.ClearAllFilters
Field.CurrentPage = NewCat
pt.RefreshTable
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
小智 5
希望这对尝试设置 PivotField 类的“CurrentPage”属性时遇到相同“1004 错误”的人有所帮助。
对我来说,当我用“CurrentPageName”替换“CurrentPage”属性时,它终于起作用了:
With pf
.ClearAllFilters
MsgBox "The PivotField is: " & pf.Value
MsgBox "The current PivotField value is: " & .CurrentPageName
.CurrentPageName = NewCat
End With
Run Code Online (Sandbox Code Playgroud)
我的数据透视表有所谓的“页面级过滤器”: 在此处输入图像描述
答案只是语法问题。
如果你改变:
With pt
Field.ClearAllFilters
Field.CurrentPage = NewCat
pt.RefreshTable
End With
Run Code Online (Sandbox Code Playgroud)
到:
With Field
.ClearAllFilters
.CurrentPage = NewCat
End With
pt.RefreshTable
Run Code Online (Sandbox Code Playgroud)
它会起作用的。
请注意,我直接Field使用With Block.
为了进一步说明,如果将其更改为以下内容,它也将起作用:
With pt.PivotFields(Field.Name)
.ClearAllFilters
.CurrentPage = NewCat
End With
pt.RefreshTable
Run Code Online (Sandbox Code Playgroud)
因此,您基本上需要直接使用对象,并且需要使用 a 来限定对象、属性、方法/等。.
| 归档时间: |
|
| 查看次数: |
20371 次 |
| 最近记录: |