Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 从Access刷新数据透视缓存_Vba_Ms Access_Pivot Table - Fatal编程技术网

Vba 从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

我正在从Access自动创建一些Excel文件。我需要有关为所有数据透视表动态重置数据透视缓存的帮助。第一组代码是在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.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)。您只需设置数据的第一个单元格,并设置字段的列数,就可以自动调整行数

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

与工作表(“数据透视”)
也不会在未定义
工作表
集合的情况下运行。
与工作表(“数据透视”)
也不会在未定义
工作表
集合的情况下运行。