3

私はこのレポートを自動化しようとしており、さまざまなタスクを実行する 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 でクエリ テーブルのみを更新するにはどうすればよいですか?

4

1 に答える 1

0

データをインポートする別の方法、つまり MS Query を選択することで、問題が軽減される可能性があることを発見しました。データのインポートに [Access から] オプションを選択するのではなく、[他のソースから] を選択してから [Microsoft Query から] を選択します。

このインポート方法を使用した後、連続して複数回更新しました。更新の直後に、ソース データベースを読み取り/書き込みモードで開くことができました。

于 2013-11-07T16:01:33.470 に答える