更新工作表后刷新BDH。 彭博。 VBA

我看到这里有一些旧的东西,但我希望有人find了一个新的解决scheme。

在我的例程中,我更新了3个工作簿中的date,以便BDH命令获取最新价格,然后将这3个工作簿的结果复制到单独的摘要工作簿中。 但是,正如常见的那样,BDHfunction不会刷新/更新,即使在那里有时间滞后。

在我复制粘贴到结果表之前,刷新或重新请求BDH命令的最新发现是什么?

===========

Twenty.Worksheets("Portfolio_2016").Activate [K3].Value = TradeDay [L3].Value = PrevTradeDay 'Japan.Worksheets("Portfolio_2016").Activate '[K3].Value = TradeDay '[L3].Value = PrevTradeDay 'AAR.Worksheets("Portfolio_2016").Activate '[K3].Value = TradeDay '[L3].Value = PrevTradeDay Call RefreshStaticLinks End Sub Public Sub RefreshStaticLinks() Call Twenty.Worksheets("Portfolio_2016").Range("K7:Q26").Select Call Application.Run("RefreshCurrentSelection") Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData") End Sub Private Sub ProcessData() Dim c As Range For Each c In Selection.Cells If c.Value = "#N/A Requesting Data..." Then Call Application.OnTime(Now + TimeValue("00:00:01"), "ProcessData") Exit Sub End If Next c Call CopyPaste End Sub 

您需要使用Application.OnTime来实现此目的。 彭博公式不会更新,而macros暂停。 彭博社WAPI常见问题部分有例子。 下面是从那里你也可以find一个示例电子表格。


[下载示例! 在此处下载一个可用的Excel VBA示例]我们的任何BDx()函数系列返回的数据都是asynchronous的。 因此,如果您的Excel VBA应用程序[macros]依赖返回的彭博数据,我们build议您将以下逻辑合并到您的VBA代码中,实际上,将数据填充到Excel单元格中时暂停应用程序:

 Option Explicit Private Const MAXROWS = 25 Sub fillFormula() Range("B2:B" & MAXROWS).Clear Range("B2").Formula = "=BDP($A2,B$1)" Range("B2").AutoFill Range("B2:B" & MAXROWS), xlFillDefault checkStatus End Sub Sub checkStatus() Dim i For i = 2 To MAXROWS ' Check to make sure that the cells are NOT requesting data If "#N/A Requesting Data..." = Cells(i, 2) Then Application.OnTime (Now + TimeValue("00:00:02")), "checkStatus" Exit Sub End If Next i MsgBox "We just finished getting the values" ' Add code here that would process the data now that it's updated End Sub 

上面的代码可以被添加到一个空白模块,下面的代码将被添加到click事件处理程序中,例如工作表上的一个button:fillFormula