更新 sheet 后刷新 BDH。布隆伯格。 Vba
Refresh the BDH's after updating sheet. Bloomberg. Vba
我看到这有一些旧的东西,但我希望有人找到了新的解决方案。
在我的例程中,我更新了 3 个工作簿中的日期,以便 BDH 命令获得最新价格,然后我将这 3 个工作簿中的结果复制到一个单独的摘要工作簿中。然而,很明显,BDH 功能没有 refresh/update,即使在那里暂停了一段时间。
在我复制粘贴到结果之前刷新或重新请求 BDH 命令的最新发现是什么 sheet?
===========
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 来实现此目的。暂停宏时,Bloomberg 公式不会更新。在 Bloomberg 上 WAPI 的常见问题部分中有示例。以下内容取自那里,您还可以在其中找到示例电子表格。
[下载范例!在此处下载工作 Excel VBA 示例]
我们的任何 BDx() 函数系列返回的数据都是异步的。因此,如果您的 Excel VBA 应用程序 [宏] 依赖于返回的 Bloomberg 数据,我们建议您将以下逻辑合并到您的 VBA 代码中,这将在本质上暂停您的应用程序,同时数据填充在您的 Excel 个单元格中:
Option Explicit
Private Const MAXROWS = 25
Sub fillFormula()
Range("B2:B" & MAXROWS).Clear
Range("B2").Formula = "=BDP($A2,B)"
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
以上代码可以添加到空白模块中,以下代码将添加到单击事件处理程序中,例如工作表上的按钮:
填充公式
我看到这有一些旧的东西,但我希望有人找到了新的解决方案。
在我的例程中,我更新了 3 个工作簿中的日期,以便 BDH 命令获得最新价格,然后我将这 3 个工作簿中的结果复制到一个单独的摘要工作簿中。然而,很明显,BDH 功能没有 refresh/update,即使在那里暂停了一段时间。
在我复制粘贴到结果之前刷新或重新请求 BDH 命令的最新发现是什么 sheet?
===========
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 来实现此目的。暂停宏时,Bloomberg 公式不会更新。在 Bloomberg 上 WAPI 的常见问题部分中有示例。以下内容取自那里,您还可以在其中找到示例电子表格。
[下载范例!在此处下载工作 Excel VBA 示例] 我们的任何 BDx() 函数系列返回的数据都是异步的。因此,如果您的 Excel VBA 应用程序 [宏] 依赖于返回的 Bloomberg 数据,我们建议您将以下逻辑合并到您的 VBA 代码中,这将在本质上暂停您的应用程序,同时数据填充在您的 Excel 个单元格中:
Option Explicit
Private Const MAXROWS = 25
Sub fillFormula()
Range("B2:B" & MAXROWS).Clear
Range("B2").Formula = "=BDP($A2,B)"
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
以上代码可以添加到空白模块中,以下代码将添加到单击事件处理程序中,例如工作表上的按钮: 填充公式