2017-09-27 11 views
0

私は4つのワークシートを持つスプレッドシートを持っており、それぞれがOLEDBデータベースに接続し、選択を実行してワークブックにデータをインポートします。電力クエリテーブルは、VBAの実行が終了するまでデータをダウンロードしません

私はクエリの更新を自動化しようとしています。

私は
ワークブックでVBAを持っている - バックグラウンド更新、
を無効に - Workbook.RefreshAll、
を実行します - trueにバックグラウンド更新をリセットします(私はそれを実行できるようにする自動化ソフトウェアのためにこれを必要とするよう最初は
)、30秒待ってから、オートメーションソフトウェアにワークブックの保存を開始するまで少し時間がかかります。

すべてのソフトウェアは、ブック内のマクロを呼び出し、実行後に保存します。

クエリが正しく実行され、テーブルのデータが更新されたことがわかります。

VBAの実行が完了した後に行がダウンロードされたというパワークエリーの確認が行われるため、自動化ソフトウェアはこれが完了する前に保存し、Excelはダウンロードが失敗したとレポートします。これはすべて問題なく動作しますが、ダウンロードが本当に失敗したかどうかはわかりません。実際の解決方法ではなく、行数の比較を追加するまではありません。

ブックを2つ作成してみましたが、1つはリフレッシュを行い、もう1つは最初のサブを呼び出してから30秒間待っていましたが、最初のサブが終了してからダウンロードが完了することを期待していましたが、起こらない。私はRefreshAllを使用する代わりに一度に1つの接続をリフレッシュしようとしましたが、実際の電力クエリーテーブルを接続の代わりにリフレッシュして、バックグラウンドクエリーをリフレッシュしようとしましたが、 VBAをフルに実行するとクラッシュします)。

また、VBAの最後にスプレッドシートを保存しようとしましたが、保存が完了してパワークエリのステータスが更新されるまで待機します。

マイ最新VBA:

Sub Workbook_RefreshAll() 

Application.DisplayAlerts = False 

For Each objConnection In ThisWorkbook.Connections 

    'Temporarily disable background-refresh 
    objConnection.OLEDBConnection.BackgroundQuery = False 
    objConnection.OLEDBConnection.MaintainConnection = False 

Next 

ActiveWorkbook.RefreshAll 

For Each objConnection In ThisWorkbook.Connections 

    'Re-enable background-refresh 
    objConnection.OLEDBConnection.BackgroundQuery = True 
    objConnection.OLEDBConnection.MaintainConnection = True 

Next 

newHour = Hour(Now()) 
newMinute = Minute(Now()) 
newSecond = Second(Now()) + 30 
waitTime = TimeSerial(newHour, newMinute, newSecond) 

Application.Wait waitTime 

End Sub 

(私は維持する接続パラメータは、実際に各リフレッシュの後にドロップするの接続を強制しようとしているように私として役立ったが、それはそう取られていない動作するかどうかを思い出すことができませんそれアウト)の代わりにApplication.Wait

答えて

0

は、次のことを試してみてください。

Do until now() >= waittime 
    DoEvents 
Loop 
+0

私はDoEvents関数のいくつかのバリエーションを試してみましたが、負荷を処理していないようです。これを確かめようと試みましたが、残念ながらまだ動作しません。リフレッシュ後に直接移動しようとしましたが、まだ喜びはありませんでした。面白いのは、コードに途切れを入れたり、読み込みが完了すると、コードがロード状態を更新する前に物理的に実行を停止する必要があるようなものです。 –

関連する問題