我試圖建立範圍級別刷新的多維數據集功能成一個大的立方基於公式的工作簿,因爲這些功能的批量生成總是可怕地執行多維數據集可用當整個工作簿被刷新時(等待幾小時和幾小時)。#GETTING_DATA消息永遠不會解決當從VBA觸發計算
我試圖使用的代碼非常簡單:
Public Sub RefreshRange()
Dim rngTarget As Excel.Range
Dim lngRescue As Long
Dim blnCalcCheck As Boolean
Set rngTarget = Selection
Do
rngTarget.Dirty
rngTarget.Calculate
DoEvents '' Used reluctantly in case VBA blocks the event that
'' causes a recalc
blnCalcCheck = blnCalcCheck Or ThisWorkbook.Connections("MyConnection").OLEDBConnection.Refreshing
lngrescue = lngRescue + 1
Sleep 200 '' API sleep function. Also tried Application.Wait.
If lngRescue >= 200 Then Debug.Assert False
Loop Until Not fblnIsGettingData(rngTarget) '' This function doesn't do much that
'' could break things. Just evaluates
'' a formula for rngTarget that checks
'' if any of the cells read
'' #GETTING_DATA
End Sub
這是行不通的。公式計算,解析爲#GETTING_DATA
,但連接永遠不會開始收集數據的過程進入它們。這只是開始,以不同程度的可靠性,如果我
- 手動重新計算工作表(Shift-F9)。這大概有50%的時間。
- 手動重新計算整個工作簿。這在大約80%的時間內工作。
- 將計算模式設置爲自動。這總是有效(到目前爲止),但始終是工作簿級別的。
它也可能開始,如果我叫Application.CalculateUntilAsyncQueriesDone
工作,但我不知道,因爲這顯然是一個工作簿級的功能和更多的點,一直似乎崩潰我的工作簿(我猜是因爲我在經常使用的名稱中使用UDF,但不確定)。
有沒有人有任何想法如何手動啓動它是啓動整個「運行後臺查詢」消息的範圍?或者,我怎樣才能看到Excel.Exe流程,以便找出並可能通過API激發相同的事情?