使用VBA更改数据透视表筛选器

8
我有一个包含“CoB日期”字段的数据透视表如下所示。
我正在尝试创建一个宏,根据用户输入自动更改日期。
我编写了以下宏代码。但它显示错误:

无法获取PivotTable类的PivotFields属性

有人可以帮助我吗?
注意:假设日期格式不是问题。

代码:

Sub My_macro()
    Dim num as String
    num = InputBox(Prompt:="Date", Title:="ENTER DATE")
    Sheets("Sheet1").PivotTables("PivotTable1") _
        .PivotFields("CoB Date").CurrentPage = num
End Sub

enter image description here


@Rory:是的,我也添加了VBA代码。 - pikachuchameleon
要得到你想要的,首先必须确保用户输入正确的日期格式。解决了这个问题后,就可以简单地使用数据透视表对象的CurrentPage方法来更新当前选定的日期。顺便提一句,我们在说普通的数据透视表,对吧?不是Power Pivot吗?你的代码不起作用是因为你试图访问数据透视表中的一个范围。 - L42
@L42:是的,普通的枢轴点。我会尝试按你提到的方法去理解。谢谢。 - pikachuchameleon
我也遇到了同样的问题。无论我怎么做,都无法通过程序设置数据透视表筛选器。我开始讨厌 VBA 了。 - Zenadix
得到了相同的错误...这到底是怎么回事 - Micah Armantrout
显示剩余6条评论
2个回答

3

如评论所述,完全相同的代码在我的端上可以工作。

Sub My_macro()
    Dim num As String
    num = InputBox(Prompt:="Date", Title:="ENTER DATE")
    Sheets("Sheet1").PivotTables("PivotTable1") _
        .PivotFields("CoB Date").CurrentPage = num
End Sub

假设您有这样的数据:
当您运行宏时,它会提示输入日期:
按下确定后,结果如下:
请注意,我们假设输入日期不是问题。因此,我们使用了简单的数据,以排除该问题,使您的代码正常工作。您可能遇到的问题是日期具有时间戳。根据您的屏幕截图,这就是情况。

是的,我试了很多次,仍然遇到了相同的错误:"无法访问 PivotTableField 属性"。我认为它没有检测到 "CoB Date" 字段。有什么建议吗? - pikachuchameleon

1

我也遇到了“无法获取PivotTable类的PivotFields属性”的问题。

我发现,虽然我的透视表是该工作表上唯一的一个(或者说在整个工作簿中),但它并不是“PivotTable1”。最有可能是因为我之前创建并删除了3个其他透视表,所以现在是“PivotTable4”。

要查找您的透视表名称,并在需要时更改它,只需在透视表中的任何位置右键单击,然后选择“透视表选项”。您将看到“透视表名称”就在顶部,可以从那里重命名它。

此外,当我尝试更改其中一个筛选器时,我也遇到了同样的错误。当我使用以下引用字段时:

Sheets("mySheetName").PivotTables("PivotTable4").PivotFields("myFieldName")

如果名称末尾有3个空格,它会抛出与上述相同的错误。我发现我的字段名称末尾有3个空格。我找到这个问题的方法是循环遍历所有的筛选字段,并为每个字段显示一个消息框,直到找到问题。以下代码是我如何做到这一点的,希望能帮助遇到类似问题的人:

Dim pt As PivotTable
Dim pf As PivotField

Set pt = Sheets("mySheetName").PivotTables("PivotTable4")
For Each pf In pt.PivotFields
    MsgBox ("FieldName: [" & pf.Name & "] with a length of: " & Len(pf.Name) & " and a trimmed length of: " & Len(Trim(pf.Name)))
Next pf

希望这能帮助到某个人!

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接