从Access刷新PivotCache

时间:2018-01-30 20:58:06

标签: vba ms-access pivot-table

我正在从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行收到错误错误

  

无效的过程调用或参数

2 个答案:

答案 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)。您只需设置数据的第一个单元格,并设置字段的列数,就会自动调整行。

我希望这个小小的咆哮能帮助那些在这里航行的人。我一直在寻找良好的动态数据透视表自动化,但大多数互联网上都有垃圾信息。