macros来更改数据透视表filter

我的目标是更改3个数据透视表的filter,所有这些都通过点击一个附属于macros的button来实现。

这是我的代码:

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)的错误PT.PivotFields("Date").CurrentPage = CDate(pickedDate)

Run time error 1004

Application Defined or Object Defined Error

我已经validation了表格的源数据是正确更新的。

我试过不使用循环,并手动进行

Worksheets("Report").PivotTables("PivotTable4").PivotFields("Date").CurrentPage = CDate(pickedDate)

为每个表,它只适用于其中一个表,我的PivotTable3表3。

更奇怪的是,当我注释掉我的代码来更改date,并使用任何一种方式(循环或手动更改3个表格)进行换档时,它都能正常工作,没有任何错误。

我已经知道我的数据透视表的名称,这不是问题。 我试图改变的字段的名称显示正确 – 它适用于其中一个表格,并且我已经将该单元格“Date”复制并粘贴到其他表格中。

我错过了什么?

我不完全确定为什么现在可以工作,但我所做的所有更改我的代码是添加到循环清除“date”字段的filter命令。

所以现在我的代码有这个循环,而不是基于我手动input的单元格值,为所有数据透视表进行date和换档更改,只需一次

  For Each PT In ActiveSheet.PivotTables PT.PivotFields("Date").ClearAllFilters PT.PivotFields("Date").CurrentPage = CDate(pickedDate) PT.PivotFields("Shift").CurrentPage = shift Next 

再次,我不知道为什么我不必为换档filter做这个,但现在它工作。 如果有人遇到这个问题,我build议先尝试一下