次のようなvbaコードを使用し
て、クエリを使用してSQLサーバーからExcelシートにデータを取得するデータ接続があります。select
With ActiveWorkbook.Connections("x"). _
OLEDBConnection
.BackgroundQuery = True
.CommandText = Array( _
"SELECT ... FROM ...
...
ActiveWorkbook.Connections("x").Refresh
インポートされたデータにリンクされたピボット テーブルも更新する必要があります。
ただし、実行が非同期であることがわかる限りActiveWorkbook.Connections("x").Refresh
、更新が完了した後に実行されるコードを実行して、このコードを実行できるようにしたいと考えています。
Private Sub UpdatePivot()
Dim PV As PivotItem
For Each PV In ActiveSheet.PivotTables("PT1").PivotFields("PN").PivotItems
If PV.Name <> "(blank)" Then
PV.Visible = True
Else
PV.Visible = False
End If
Next
End Sub
ただし、データが読み込まれたときのみ、
すべてのデータを取得して更新が完了したことをどのように知ることができますか? ハックに頼らずに更新が完了した後
にのみサブを実行するにはどうすればよいですか。UpdatePivot
sleep
PS 動的な選択している正確なデータに応じて、クエリが高速 (1 秒未満) になることもあれば、低速 (30 秒超) になることもあります。