使用VBA更改数据透视表过滤器

时间:2014-06-16 09:09:24

标签: excel vba excel-vba excel-addins

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

无法获取数据透视表类的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

2 个答案:

答案 0 :(得分:2)

作为评论,完全相同的代码在我的结尾。

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

运行宏时,它会提示输入日期:

enter image description here

然后按下确定后,结果将是:

enter image description here

请注意,我们假设输入日期不是问题 所以我们使用了一个简单的数据来消除它,所以你的代码可以工作 您正在处理的可能问题是日期是否有时间戳 根据您的屏幕截图,情况就是如此。

答案 1 :(得分:1)

我遇到了与#34相同的问题;无法获得数据透视表类的PivotFields属性"。

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

要查找数据透视表的名称,并根据需要进行更改,只需右键单击数据透视表中的任意位置,然后选择"数据透视表选项"。您将看到"数据透视表名称"在顶部,可以从那里重命名。

此外,在尝试更改其中一个过滤器时,我遇到了同样的错误问题。当我使用:

引用该字段时
Sheets("mySheetName").PivotTables("PivotTable4").PivotFields("myFieldName")

它会抛出与上面相同的错误。事实证明我的字段名称末尾有3个空格。我发现这个的方法可能是循环遍历显示每个MsgBox的所有过滤器字段,直到找到它为止。以下代码是我如何做到这一点,并希望可以帮助有类似问题的人:

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

希望这有助于某人!