首页 文章

更新Bloomberg API静态数据

提问于
浏览
0

我想将数据从一张纸复制并粘贴到另一张纸上 . 原始数据来自Bloomberg API函数 . 我发现Bloomberg数据单元仅在宏完成运行后更新 . 我尝试构建一个私有函数,让我在复制之前更新静态数据 . 这是我的代码:

Private Sub ProcesData()

Application.Run

Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData")

End Sub


Sub Macro3()

Dim i As Integer
i = 1

Do Until i > 2
    Sheets("Sheet1").Activate

    Cells(1, 3).Value = Cells(i, 1)

    i = i + 1

    Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData")

    Range("C4:E181").Select

    Selection.Copy

    Sheets("Sheet2").Select
    Range("A1").Select
    lMaxRows = Cells(Rows.Count, "A").End(xlUp).Row
    Range("A" & lMaxRows + 1).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

Loop

End Sub

1 回答

  • 1

    啊,Bloomberg API ......很多问题 .

    因此,当您使用函数调用执行Bloomberg请求时,单元调用站点将收到回调并刷新数据 .

    The problem is, w.r.t. automation, the data can come back in parts and you have to wait till it completes before continuing to process your data.

    因此,该解决方案有3种方法 .

    • 上次我看,这是彭博推荐的那个 . 有一个例程刷新对单元格公式的调用 . This has a timer and recursively invokes itself 直到检索到数据 . 解决这个问题的方法是知道何时正确检索数据 . 检查数据区域是否有错误,表示尚未完成 .

    • 另一个解决方案是使用Application.Run调用调用,在代码中构建公式并使用VBA调用 . 这允许您不在工作表中处理这样的功能 . 但实际上与1相同 .

    • 您可以设置对Bloomberg API的引用并使用COM来执行请求 . 这是一种更清晰的方法,您可以更轻松地将其集成到您的代码中,从而有效地创建Bloomberg数据调用API .

    我建议,如果可能的话,选择3 . 虽然需要更多努力,但代码变得更加清晰 . 当工作簿在结构等方面变得更加复杂时,选项1.和2.调试起来很棘手 .

    如果你搜索你的Bloomberg帮助(有史以来最伟大的'F1 F1'帮助服务应该能够指出你正确的方向 . 在我看来,这是迄今为止最令人印象深刻的帮助系统!)Bloomberg确实有一些例子证明了这些方法上面突出显示

    所以,随着手头的问题,并最终回答你的问题:)我会重构你的代码,实际上做函数调用,最初做一个Calcuation(它会调用你对Bloomberg的请求) . 然后进入一个递归函数,该函数调用自身直到数据中没有错误 . 然后,您将复制数据 .

    希望有所帮助 .

相关问题