Данные Bloomberg не заполняются до завершения макроса Excel VBA

Я запускаю макрос в пустой рабочей книге Excel 2007 на ПК с лицензией Bloomberg. Макрос вставляет в лист1 функции Bloomberg, которые извлекают данные кривой доходности. Результаты некоторых дополнительных функций зависят от завершения работы первой функции и правильного отображения данных Bberg. Когда я прохожу через программу, она отображает только '#N/A Requesting Data . ..." вместо результатов запроса, независимо от того, насколько медленно я продвигаюсь. Поскольку некоторые функции зависят от заполнения результатов строковых и числовых полей, программа выдает ошибку времени выполнения на этом коде. Когда я прекращаю отладку - полностью завершаю выполнение программы - все значения Bberg, которые должны были заполниться, появляются. Я хочу, чтобы эти значения появлялись во время работы программы.

Я пробовал использовать комбинацию DoEvents и Application.OnTime(), чтобы вернуть управление операционной системе и заставить программу долго ждать обновления данных, но ни то, ни другое не помогло. Любые идеи были бы полезны. Мой код приведен ниже. wb - рабочая книга глобального уровня, а ws1 - рабочий лист глобального уровня.

Public Sub Run_Me()

    'Application.DisplayAlerts = False
    'Application.ScreenUpdating = False

    Call Populate_Me
    Call Format_Me

    'Application.DisplayAlerts = True
    'Application.ScreenUpdating = True

End Sub
Private Sub Populate_Me()

    Dim lRow_PM As Integer
    Dim xlCalc As XlCalculation

    Set wb = ThisWorkbook
    Set ws1 = wb.Sheets(1)

    'clear out any values from previous day
    If wb.Sheets(ws1.Name).Range("A1").Value <> "" Then
        wb.Sheets(ws1.Name).Select
        Selection.ClearContents
    End If


    xlCalc = Application.Calculation
    Application.Calculation = xlCalculationAutomatic

    Range("A1").Value = "F5"
    Range("B1").Value = "Term"
    Range("C1").Value = "PX LAST"

    Range("A2").Select
    ActiveCell.FormulaR1C1 = "=BDS(""YCCF0005 Index"",""CURVE_MEMBERS"",""cols=1;rows=15"")"
    BloombergUI.RefreshAllStaticData

    Range("B2").Select
    ActiveCell.FormulaR1C1 = "=BDS(""YCCF0005 Index"",""CURVE_TERMS"",""cols=1;rows=15"")"
    BloombergUI.RefreshAllStaticData

    Application.OnTime Now + TimeValue("00:00:10"), "HardCode"

    '******more code*******'
    End Sub
Sub HardCode()

    Range("C2").Select
    ActiveCell.FormulaR1C1 = "=BDP($A2,C$1)"
    BloombergUI.RefreshAllStaticData

End Sub
10
задан SamHarper 18 October 2019 в 08:39
поделиться