Подождите, пока Excel не завершит заполнение данных Bloomberg с помощью VBA - PullRequest
0 голосов
/ 23 октября 2018

У меня есть лист Excel с формулами ~ 300 000 BDH для загрузки цен на ценные бумаги.

Я хочу

  1. открыть файл и получить все цены
  2. вставитьих как значения
  3. сохраните и закройте файл.

Однако я не знаю, когда Excel завершит заполнение данных Bloomberg, поэтому трудно определить время для выполнения 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

В 'ThisWorkbook'

Private Sub Run()
Call CheckFormulas
End Sub

Таким образом, теоретически это должно работать так:

  1. Я открываю файл
  2. код проверяет каждые 30 минут, выполняются ли все формулы BDH
  3. , если онии вставьте в качестве значений, сохраните и закройте 4) если нет, проверьте еще раз через 30 минут.

Мне интересно, является ли это лучшим способом для достижения моей цели, и хочу знать, если Application.CalculationState совместим или работает с формулами Блумберга BDH?

1 Ответ

0 голосов
/ 23 октября 2018

В нашей производственной среде мы используем ячейку, которая проверяет, есть ли ячейки с «Req» в их формуле:

=SUM(IFERROR(FIND("Req", _range_to_check_with_formulas_ ),0))

В Sub VBA мы проверяем значение ячейки с помощью WHILE LOOP:

while cell_to_test.value <> 0
    Application.Calculate
    Application.RTD.RefreshData
    DoEvents
Wend

Call _sub_to_do_some_stuff_
...