我的目标是更改3个数据透视表的过滤器,只需点击一个附加到宏的按钮,就可以使用相同的字段。
这是我的代码:
Dim pickedDate As String
Dim shift As String
pickedDate = Worksheets("Report").Range("C1").Value
shift = Worksheets("Report").Range("C2").Value
Worksheets("Report").PivotTables("PivotTable2").PivotCache.SourceData = Worksheets("Fullness").Range("A1").CurrentRegion.Address(, , xlR1C1, True)
Worksheets("Report").PivotTables("PivotTable3").PivotCache.SourceData = Worksheets("Backed").Range("A1").CurrentRegion.Address(, , xlR1C1, True)
Worksheets("Report").PivotTables("PivotTable4").PivotCache.SourceData = Worksheets("Hoist").Range("A1").CurrentRegion.Address(, , xlR1C1, True)
For Each PT In ActiveSheet.PivotTables
PT.PivotFields("Date").CurrentPage = CDate(pickedDate)
PT.PivotFields("Shift").CurrentPage = shift
Next
但是,当我进入数据透视表的循环时,我收到PT.PivotFields("Date").CurrentPage = CDate(pickedDate)
上的错误:
Run time error 1004
Application Defined or Object Defined Error
我已经验证了表格的源数据是否正确更新。
我尝试过不使用循环,并像
一样手动完成 Worksheets("Report").PivotTables("PivotTable4").PivotFields("Date").CurrentPage = CDate(pickedDate)
,它仅适用于其中一个表PivotTable3
。
更奇怪的是,当我注释掉我的代码来更改日期,并使用任何一种方式(3个表的循环或手动更改)进行班次更改时,它完美无误地运行。
我已经验证了我的数据透视表的名称,这不是问题。我正在尝试更改的字段的名称也显示正确 - 它适用于其中一个表格,我已将该单元格“日期”复制并粘贴到其他表格中。
我错过了什么?
答案 0 :(得分:2)
我现在还不完全确定为什么会这样,但是我所做的更改代码的方法是在循环中为“Date”字段添加一个清晰的过滤器命令。
所以现在我的代码有了这个循环而不是根据我手动输入的单元格值为所有数据透视表进行日期和班次更改
For Each PT In ActiveSheet.PivotTables
PT.PivotFields("Date").ClearAllFilters
PT.PivotFields("Date").CurrentPage = CDate(pickedDate)
PT.PivotFields("Shift").CurrentPage = shift
Next
同样,我不确定为什么我不必为移位过滤器做这个,但现在它可以工作。如果有人遇到这个问题,我建议先尝试一下