刷新外部链接源的数据(数据透视表)而不打开它(来自第二个文件)

时间:2019-05-21 16:49:36

标签: excel vba

背景

我有两个文件(我们将它们分别称为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但也没有刷新任何内容时,它不会给我错误。

有人知道我的代码有什么问题吗,或者不知道我如何使它工作(使用其他代码)吗?

谢谢!

1 个答案:

答案 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 中,因此它将在文件打开时自动运行。