前回の投稿「初回実行時に Excel のピボットテーブル データを自動更新する」で、最初の実行時に外部データ ソースからのクエリが更新され、実行に約 1 分かかることがわかりました。2 回目の実行では、ピボット テーブルが更新されます。
をクリックして、外部データ ソースとピボット テーブルの両方をタイム スケジュール内で一緒に更新するソリューション ( VBA コードcommand button
) はありますか(タイマーを設定するとします)。
前回の投稿「初回実行時に Excel のピボットテーブル データを自動更新する」で、最初の実行時に外部データ ソースからのクエリが更新され、実行に約 1 分かかることがわかりました。2 回目の実行では、ピボット テーブルが更新されます。
をクリックして、外部データ ソースとピボット テーブルの両方をタイム スケジュール内で一緒に更新するソリューション ( VBA コードcommand button
) はありますか(タイマーを設定するとします)。
上記の回答を使用しましたが、 RefreshAll メソッドを使用しました。また、名前を指定しなくても複数の接続ができるように変更しました。次に、これをスプレッドシートのボタンにリンクしました。
Sub Refresh()
Dim conn As Variant
For Each conn In ActiveWorkbook.Connections
conn.ODBCConnection.BackgroundQuery = False
Next conn
ActiveWorkbook.RefreshAll
End Sub
Background Query プロパティを False に設定せずに、更新が完了するまで Excel を待機させる簡単な方法があると思います。なぜ人々の好みを台無しにするのですか?
Excel 2010 (およびそれ以降) には CalculateUntilAsyncQueriesDone と呼ばれるこのメソッドがあり、RefreshAll メソッドを呼び出した後に呼び出すだけで済みます。Excel は計算が完了するまで待機します。
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
私は通常、モデルを他の人に送信する前に、これらをまとめて、中断することなく完全なマスター計算を行います。このようなもの:
ThisWorkbook.RefreshAll
Application.CalculateUntilAsyncQueriesDone
Application.CalculateFullRebuild
Application.CalculateUntilAsyncQueriesDone
たとえば、5 秒ごとにワークブックを 自動更新します。モジュールに適用
Public Sub Refresh()
'refresh
ActiveWorkbook.RefreshAll
alertTime = Now + TimeValue("00:00:05") 'hh:mm:ss
Application.OnTime alertTime, "Refresh"
End Sub
開いているブックに適用
Private Sub Workbook_Open()
alertTime = Now + TimeValue("00:00:05") 'hh:mm:ss
Application.OnTime alertTime, "Refresh"
End Sub
:)