shikumika’s diary

日々の事務作業で手間なことを簡単にできる仕組み(自動化、方法など)、困ったことの解決方法を調べた備忘録

【Excel】VBAで、PowerQueryの更新を待ってピボットテーブルを更新

VBAで、PowerQueryの更新を待ってピボットテーブルを更新するときの備忘録。PowerQueryの更新が完了してから次の処理を実行したいときはBackgroundQuery プロパティがFalseの状態にしておく。

以下は、PowerQueryの更新を待たずにピボットテーブルが更新されてしまい、データ更新前の状態でピボットテーブルが表示されてしまったときの解決方法。

 

処理の背景は、

ActiveWorkbook.RefreshAll

Sheets("集計").PivotTables("ピボットテーブル1").PivotCache.Refresh

で、一旦すべてのデータ(外部データは、ピボットテーブル)を更新した後、念のためピボットテーブルを再更新というもの。

 

更新されないまま、次の処理に進んでしまうので、調べてみたら、

RefreshAllの仕様として、

BackgroundQuery プロパティが True に設定されているオブジェクトは、バックグラウンドで更新されます。

出典: Workbook.RefreshAll メソッド (Excel) | Microsoft Learn

ということ。

 

元のクエリのプロパティで、バックグラウンドで更新するのチェックを外すことで、期待する処理ができました。



なお、個別にPowerQueryを更新する場合は、

Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False

というように、Falseの設定ができます。

 

以上、VBAで、PowerQueryの更新を待たずにピボットテーブルが更新されてしまう時の確認ポイントでした。

 

参考情報

データの加工・抽出、管理の操作事例を以下にまとめています。

shikumika.org