私はこのレポートを自動化しようとしており、さまざまなタスクを実行する VBA を作成してから、それぞれを「RunAll」サブルーチンで順番に呼び出しています。Access クエリからピボット テーブルのワークブックのタブへのデータがあります。
これを実行すると、次のことがわかりました。
Sub QueryTableRefresh()
ActiveWorkbook.Sheets("data").Activate
Range("A2").Activate
Selection.ListObject.QueryTable.Refresh BackgroundQuery:=False
End Sub
Accessで不完全なOLEアクションを作成し、以下を実行するとAccessの読み取り専用インスタンスが開きます(「TableRefresh」は削除クエリと追加クエリを含む関数です):
Public Sub RefreshAccessTables()
Dim acApp As Object
Dim db As Object
Set acApp = CreateObject("Access.Application")
acApp.OpenCurrentDatabase ("P:\Reports\Daily Origination Volume\Daily Origination Volume.accdb")
Set db = acApp
acApp.Run "TableRefresh"
acApp.Quit
Set acApp = Nothing
End Sub
読み取り専用インスタンスは、削除クエリと追加クエリの書き込みアクションを防ぎます。これは、RunAll 内でこれら 2 つが実行される順序ではありませんが、ワークフローでは、更新が行われた場合に RunAll を再度実行する必要があり、競合が発生します。
クエリテーブルの更新を実行するまで、Excel から Access 関数を連続して複数回実行しましたが、問題はありません。Refreshall でも同じ問題が発生します。
この OLE アクションを不完全なままにせずに、Excel でクエリ テーブルのみを更新するにはどうすればよいですか?