【问题标题】:How to refresh Bloomberg data in a loop?如何循环刷新彭博数据?
【发布时间】:2021-03-01 07:05:19
【问题描述】:

我有一个函数可以将彭博公式插入到单元格中

for i = 1 To Data.UsedRange.Row.Count 
    Data.Cells(i, 12).Forumla="=BDP(""" & Data.Cells(i,2).value & " EQUITTY" & _
      """,""EQY_WEIGHTED_AVG_PX"",""VWAP_START_TIME=" & startTime & """,""VWAP_END_TIME="& endTime & _ 
      """,""VWAP_START_DT=" & startDate & """,""VWAP_END_DT=" & endDate & """)"
    Call Application.OnTime(Now + TimeValue("00:00:01"),"ProcessData")
next i


Public Sub ProcessData()
    For i = 1 To Data.UsedRange.Rows.Count
        if Data.cells(i,12).Value = "#N/A Requesting Data..." Then
            Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData")
        End If
    Next i
End Sub

该函数从工作表中获取值,然后创建一个包含输出的工作表。
我遍历所有行,以获取股票名称等,然后将 VWAP Bloomberg 公式插入单元格。

我得到了

N/A 请求数据...

我知道彭博需要时间来加载数据;这就是为什么我试图打电话给Application.OnTime。它只在一段时间内有效。

例如我第一次运行两个订单,它有效。如果我运行另一个订单,它会返回 N/A Requesting Data...

【问题讨论】:

  • 彭博社似乎在 2020 年 9 月 21 日的 API 更新中中断了 Application.OnTime 调用 - 请参阅 here

标签: excel vba bloomberg


【解决方案1】:

请看这篇文章:

Wait until Excel finishes populating Bloomberg data using VBA

我发现了一个技巧,等待所有请求的数据从 Bloomberg 发送回我的 Excel,然后您可以安全地致电您的 ProcessData()

【讨论】:

  • 感谢您的回复。因此,您建议使用 IFERROR 将值更改为 0,然后调用 Application.Calculate Application.RTD.RefreshData DoEvents
  • 是的。试试这个,让我们知道
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多