2017-09-27 78 views
0

我有一個包含4個工作表的電子表格,每個工作表連接到一個電源查詢,該查詢連接到一個OLEDB數據庫並運行select將數據導入工作簿。電源查詢表將不會下載數據,直到VBA完成執行

我試圖自動刷新查詢。

我有VBA中
工作簿 - 禁用背景的刷新,
- 運行Workbook.RefreshAll,
- 重置後臺刷新爲true(因爲我需要這樣的自動化軟件,以便能夠運行首先)和
- 然後在開始保存工作簿之前,等待30秒,讓自動化軟件稍微等待一段時間。

所有軟件都會調用工作簿中的宏,然後保存以下執行。

查詢正確執行一個接一個,我可以告訴表中的數據已刷新。

電源查詢確認行已經被下載發生在VBA完成執行後,所以自動化軟件在完成之前將其保存並且Excel將下載報告爲失敗。當一切正常時,這並不是一個問題,但我們不會知道下載何時真正失敗,除非我添加某種行數比較,這實際上是一種解決方法,而不是真正的解決方案。

我已經嘗試在工作簿中創建兩個子工作簿,一個用於刷新,然後另一個用於調用第一個子工件,然後等待30秒,我希望在第一個子工具完成執行後下載完成,但是這樣做不會發生。我嘗試刷新一個連接,而不是使用RefreshAll,嘗試刷新實際的電源查詢表而不是連接,並嘗試刷新後臺查詢設置爲true,然後循環,直到刷新被標記爲完成(如果你單步通過它,但如果你只是完全運行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 

(我不記得保持連接參數是否實際上幫助,因爲我是試圖強行連接每次刷新後下降,但它的作品所以沒有采取。出來)

回答

0

代替Application.Wait嘗試以下操作:

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

我沒有嘗試的DoEvents的一些變化,但它似乎沒有處理負荷。嘗試了這一點,雖然仍然無法正常工作,但試圖在刷新之後立即將其移動,但仍然沒有快樂。有趣的是,如果我在代碼中插入一個斷點或者逐步完成加載,就像代碼在更新加載狀態之前需要物理停止執行一樣。 –

相關問題