[英]Wait until Excel finishes populating Bloomberg data using VBA
我有一個包含 ~300,000 BDH 公式的 Excel 表格來下載證券價格。
我想要
但是,我不知道 Excel 何時完成填充彭博數據,因此很難確定執行 2) 和 3) 的時間。
我已經寫了 VBA,但不確定它是否有效:
在模塊Module1
Sub CheckFormulas()
If Application.CalculationState = xlDone Then
With Worksheets("Sheet1").UsedRange
.Value = .Value
End With
Else
Application.OnTime Now + TimeValue("00:30:00"), "CheckFormulas"
ActiveWorkbook.Close Savechanges:=True
End If
End Sub
在“本工作簿”中
Private Sub Run()
Call CheckFormulas
End Sub
所以它理論上應該工作的方式是:
我想知道這是否是實現我的目標的最佳方式,並想知道Application.CalculationState
是否兼容或適用於彭博公式 BDH?
在我們的生產環境中,我們使用一個單元格來檢查公式中是否有帶有“Req”的單元格:
=SUM(IFERROR(FIND("Req", _range_to_check_with_formulas_ ),0))
在 VBA Sub 中,我們使用 WHILE LOOP 測試單元格值:
while cell_to_test.value <> 0
Application.Calculate
Application.RTD.RefreshData
DoEvents
Wend
Call _sub_to_do_some_stuff_
基於@stexcec 的回答,因為我不想在工作表中添加測試單元格,所以我使用 VBA 根據值搜索"requesting"
。 以下函數用於在包含彭博公式的Range
中查找"requesting"
:
Function IsFinished(ws As Worksheet) As Boolean
Dim i, j, LastRow, LastCol As Integer
Dim r, c As Range
LastRow = ws.Range("A1").End(xlDown).Row
LastCol = ws.Range("A1").End(xlToRight).Column
Set r = ws.Range(ws.Cells(1, 1), ws.Cells(LastRow, LastCol))
Set c = r.Find("Requesting", LookIn:=xlValues)
If c Is Nothing Then
IsFinished = True
Else
IsFinished = False
End If
End Function
然后,類似於@stexcec 的回答,以下代碼用於等待所有單元格刷新:
' Wait until updated
Do While True
Application.Calculate
Application.RTD.RefreshData
DoEvents
If IsFinished(Application.ActiveSheet) Then
Exit Do
End If
Loop
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.