Обновить данные (сводную таблицу) внешнего источника ссылки, не открывая его (из 2-го файла) - PullRequest
0 голосов
/ 21 мая 2019

Фон

У меня есть два файла (назовем их Book1 и Book2), которые связаны друг с другом (с индексными формулами MATCH MATCH; следовательно, внешняя ссылка).

Книга 1: содержит список предметов (например, яблоко, банан, апельсин) и количества для каждого предмета на одном листе (лист1), которые затем суммируются в сводной таблице на листе 2.

Book2: представляет собой сводный список и в основном ищет количества из Book1 с совпадением индекса (которое работает идеально).

Необработанные данные сбрасываются (с использованием Alteryx) в Книгу 1 (Лист1).

Задача Есть ли способ обновить данные в сводной таблице (Book1.Sheet2), не открывая файл, а открывая Book2?

Trial Вот код, который я нашел в своем исследовании, который, кажется, работает для других, но не для меня:

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 и пытаюсь запустить его вручную, он выдает ошибку «Требуется объект 424» для PivotTable.RefreshTable. Это не выдает ошибку при открытии Book2, но также ничего не обновляет.

Кто-нибудь знает, что не так с моим кодом, или знает, как я могу заставить его работать (с другим кодом)?

Спасибо!

1 Ответ

0 голосов
/ 21 мая 2019

РЕШЕНИЕ

Благодаря комментариям (и ссылке от 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

Подсказка: я добавил код в Модуль с Sub Auto_Open(), чтобы он автоматически запускался при открытии файла.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...