更新Bloomberg API静态数据

时间:2016-02-02 22:59:27

标签: excel vba bloomberg

我想将数据从一张纸复制并粘贴到另一张纸上。原始数据来自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 个答案:

答案 0 :(得分:1)

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

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

问题是,w.r.t。自动化,数据可以部分返回,您必须等到完成后再继续处理数据。

因此,此解决方案有3种方法。

  1. 上次我看,这是彭博推荐的那个。有一个例程刷新对单元格公式的调用。 这有一个计时器并以递归方式调用,直到检索到数据。解决这个问题的方法是知道何时正确检索数据。检查数据区域是否有错误,表示尚未完成。
  2. 另一个解决方案是使用Application.Run调用调用,在代码中构建公式并使用VBA调用。这允许您不在工作表中处理这样的功能。但实际上与1相同。
  3. 您可以设置对Bloomberg API的引用,并使用COM来执行请求。这是一种更清晰的方法,您可以更轻松地将其集成到您的代码中,从而有效地创建Bloomberg数据调用API。
  4. 我建议,如果可能的话,选择3。虽然需要更多努力,但代码变得更加清晰。当您的工作簿在结构等方面变得更加复杂时,选项1.和2.可能很难调试。

    如果你搜索你的彭博帮助(那个史无前例的'F1 F1'帮助服务应该能指出你正确的方向。在我看来,这是迄今为止最令人印象深刻的帮助系统!)布隆伯格确实有一些例子演示上面强调的方法。

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

    希望有所帮助。