背景
我有两个文件(我们将它们分别称为Book1和Book2),它们相互链接(具有索引MATCH MATCH公式;因此是外部链接)。
Book1:在一张工作表(Sheet1)中具有一个项目列表(例如,苹果,香蕉,橙子)和每个项目的数量,然后在工作表2的数据透视表中进行汇总。
Book2:是一个摘要列表,基本上通过Index match match(完美地工作)从Book1中查找数量。
将原始数据转储到Book1(Sheet1)中(使用Alteryx)。
问题 有没有一种方法可以刷新数据透视表(Book1.Sheet2)中的数据而不打开文件,而是在打开Book2时?
试用 这是我通过研究发现的代码,它似乎对其他人有用,但对我却不起作用:
Public Sub refreshXLS()
Path = "C:\Users\cae0030\Documents\Book1.xlsx" 'the workbook path you want to refresh
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
.AskToUpdateLinks = False
End With
Workbooks.Open Path
Application.AskToUpdateLinks = False
PivotTable.RefreshTable
ActiveWorkbook.Close True
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
.AskToUpdateLinks = True
End With
End Sub
基本上,当我打开Book2时,什么都没有发生。当我打开VBA并尝试手动运行它时,它为PivotTable.RefreshTable
提供了'424'对象必需的错误。当我只打开Book2但也没有刷新任何内容时,它不会给我错误。
有人知道我的代码有什么问题吗,或者不知道我如何使它工作(使用其他代码)吗?
谢谢!
答案 0 :(得分:0)
解决方案
由于注释的输入(以及来自BigBen的链接),我能够使以下代码适合我的情况:
Sub Auto_Open()
Dim pT As PivotTable 'to define PivotTable
Path = "C:\Users\cae0030\Documents\Book1.xlsx" 'the workbook path you want to refresh
With Application
.DisplayAlerts = False
.ScreenUpdating = False
.EnableEvents = False
.AskToUpdateLinks = False
End With
Workbooks.Open Path
Application.AskToUpdateLinks = False
Set pT = Worksheets("Sheet2").PivotTables("PivotTable1") 'to set pT to desired pivot table
pT.RefreshTable
ActiveWorkbook.Close True
With Application
.DisplayAlerts = True
.ScreenUpdating = True
.EnableEvents = True
.AskToUpdateLinks = True
End With
End Sub
提示:我将代码添加到带有子Auto_Open()
的 Module 中,因此它将在文件打开时自动运行。