Vba 从Access刷新数据透视缓存
我正在从Access自动创建一些Excel文件。我需要有关为所有数据透视表动态重置数据透视缓存的帮助。第一组代码是在Excel中测试工作代码。现在,我想将其转换为从Access模块运行Vba 从Access刷新数据透视缓存,vba,ms-access,pivot-table,Vba,Ms Access,Pivot Table,我正在从Access自动创建一些Excel文件。我需要有关为所有数据透视表动态重置数据透视缓存的帮助。第一组代码是在Excel中测试工作代码。现在,我想将其转换为从Access模块运行 Sub Update_PTSource() With Sheets("Pivot") .PivotTables(1).ChangePivotCache ActiveWorkbook.PivotCaches.Create(SourceType:=xlDatabase, SourceData:=Sheets
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.changeprovotcache
行中出错
无效的过程调用或参数
据我所知,您只犯了一个简单的错误:
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
据我所知,您只犯了一个简单的错误:
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
在设计解决方案时,我会尽可能少地使用代码,因此我找到了一种更简单的方法来完成我想做的事情 我的任务是更新和刷新所有透视表的源数据。有一个源,多个透视表。为此,我在Access写入的模板Excel手册中为源代码创建了一个动态命名范围。我从不在模板上保存,我只是使用saveas vba创建填充副本 但是,由于我已经创建了一个命名范围,并且始终使用Access修改相同的模板文件,因此我不需要编写程序来更改数据透视缓存。我可以在Excel功能区中使用“更改数据源”。vba代码变得容易多了。它只是:ThisWorkbook.RefreshAll的一个变体。不需要代码循环 我的策略的全部力量是创建命名范围的公式=数据$A$5:OFFSET(数据!$A$5,COUNTA(数据!$A:$A)-1,52)。您只需设置数据的第一个单元格,并设置字段的列数,就可以自动调整行数
我希望这个小小的咆哮能帮助在这里航行的人。我一直在寻找良好的动态数据透视表自动化,但大多数互联网上都有这方面的垃圾信息。我在设计解决方案时尽可能少地使用代码,因此我找到了一种更简单的方法来完成我想做的事情 我的任务是更新和刷新所有透视表的源数据。有一个源,多个透视表。为此,我在Access写入的模板Excel手册中为源代码创建了一个动态命名范围。我从不在模板上保存,我只是使用saveas vba创建填充副本 但是,由于我已经创建了一个命名范围,并且始终使用Access修改相同的模板文件,因此我不需要编写程序来更改数据透视缓存。我可以在Excel功能区中使用“更改数据源”。vba代码变得容易多了。它只是:ThisWorkbook.RefreshAll的一个变体。不需要代码循环 我的策略的全部力量是创建命名范围的公式=数据$A$5:OFFSET(数据!$A$5,COUNTA(数据!$A:$A)-1,52)。您只需设置数据的第一个单元格,并设置字段的列数,就可以自动调整行数 我希望这个小小的咆哮能帮助在这里航行的人。我一直在寻找良好的动态数据透视表自动化,但大多数互联网上都有这方面的垃圾信息。
与工作表(“数据透视”)
也不会在未定义工作表集合的情况下运行。与工作表(“数据透视”)
也不会在未定义工作表集合的情况下运行。