我正在从Access自动创建一些Excel文件。我需要帮助动态重置所有数据透视表的pivotcache。第一组代码是我在Excel中测试工作代码。现在我想翻译它,以便从Access模块运行。
Sub Update_PTSource()
With Sheets("Pivot")
.PivotTables(1).ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets("Data").Range("data"))
End With
End Sub
Function pivot_refresh_test()
Dim pt As Variant
Dim wb, ws As Object
Dim strWBName As String
Dim strTabName As String
strWBName = "C:\Users\...\Packaged SKU.xlsb"
strTabName = "Pivot"
Set wb = GetObject(strWBName)
For Each pt In wb.Sheets(strTabName).Pivottables
pt.ChangePivotCache wb.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=wb.Sheets("Data").Range("data"))
pt.RefreshTable
Next pt
End Function
我在pt.ChangePivotCache
行收到错误错误
无效的过程调用或参数
答案 0 :(得分:2)
据我所知,你只做了一个简单的错误:
xlDatabase
是一个Excel枚举,由于您使用的是后期绑定,因此您无法访问它。您可以使用它的整数值1代替:
For Each pt In wb.Sheets(strTabName).Pivottables
pt.ChangePivotCache wb.PivotCaches.Create(SourceType:=1, SourceData:=wb.Sheets("Data").Range("data"))
pt.RefreshTable
Next pt
答案 1 :(得分:0)
我在设计解决方案时肛门使用尽可能少的代码,所以我发现了一种更容易实现我想做的方法。
我的任务是更新和刷新所有数据透视表的源数据。有一个源,多个数据透视表。我在我的模板Excel中为Access创建了一个动态的命名区域。我从来没有保存模板,我只使用saveas vba来创建填充的副本。
但是,由于我创建了一个命名区域并且使用Access修改了相同的模板文件,因此我不需要编写程序来更改我的pivotcache。我可以使用'更改数据源'在Excel功能区中。 vba代码变得更容易。它只是一个变体:ThisWorkbook.RefreshAll。不需要代码循环!
我的策略的全部力量是创建我的命名范围的公式。 =数据$ A $ 5:!OFFSET(数据$ A $ 5 COUNTA(数据$ A:!$ A)-1,52)。您只需设置数据的第一个单元格,并设置字段的列数,就会自动调整行。
我希望这个小小的咆哮能帮助那些在这里航行的人。我一直在寻找良好的动态数据透视表自动化,但大多数互联网上都有垃圾信息。