Dia*_*ini 10 excel vba excel-2007 excel-vba bloomberg
我在具有Bloomberg许可证的PC上的空白Excel 2007工作簿中运行宏.宏将Bloomberg函数插入到sheet1中,以获取收益率曲线数据.一些附加功能的结果取决于完成和正确显示Bberg数据的第一个功能.当我单步执行程序时,它只显示'#N/A请求数据..".而不是查询的结果,无论我走得多慢.由于某些函数依赖于填充的字符串和数字字段结果,因此程序会在该代码处遇到运行时错误.当我停止调试 - 完全结束运行程序 - 然后出现应该填充的所有Bberg值.我希望在程序仍在运行时显示这些值.
我尝试使用DoEvents和Application.OnTime()的组合将控制权返回给操作系统,并使程序等待很长时间进行数据更新,但都没有工作.任何想法都会有所帮助.我的代码如下. wb是一个全局级工作簿,ws1是一个全局级工作表.
Public Sub Run_Me()
Public Sub Run_Me()
'Application.DisplayAlerts = False
'Application.ScreenUpdating = False
Call Populate_Me
Call Format_Me
'Application.DisplayAlerts = True
'Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)
结束子
Private Sub Populate_Me()
Private Sub Populate_Me()
Dim lRow_PM As Integer
Dim xlCalc As XlCalculation
Set wb = ThisWorkbook
Set ws1 = wb.Sheets(1)
'clear out any values from previous day
If wb.Sheets(ws1.Name).Range("A1").Value <> "" Then
wb.Sheets(ws1.Name).Select
Selection.ClearContents
End If
xlCalc = Application.Calculation
Application.Calculation = xlCalculationAutomatic
Range("A1").Value = "F5"
Range("B1").Value = "Term"
Range("C1").Value = "PX LAST"
Range("A2").Select
ActiveCell.FormulaR1C1 = "=BDS(""YCCF0005 Index"",""CURVE_MEMBERS"",""cols=1;rows=15"")"
BloombergUI.RefreshAllStaticData
Range("B2").Select
ActiveCell.FormulaR1C1 = "=BDS(""YCCF0005 Index"",""CURVE_TERMS"",""cols=1;rows=15"")"
BloombergUI.RefreshAllStaticData
Application.OnTime Now + TimeValue("00:00:10"), "HardCode"
'******more code*******'
End Sub
Run Code Online (Sandbox Code Playgroud)
Sub HardCode()
Sub HardCode()
Range("C2").Select
ActiveCell.FormulaR1C1 = "=BDP($A2,C$1)"
BloombergUI.RefreshAllStaticData
End Sub
Run Code Online (Sandbox Code Playgroud)
结束子
小智 6
解决这个问题的一种方法是在将bloomberg数据拉入另一个子数据库之后放置您想要运行的所有子类.每次拨打彭博信息时都必须这样做.如果在Application.OnTime Now + TimeValue("00:00:15")之后调用"master"子中的另一个sub,它将失败 - 您必须将所有子跟随放入新的master子.
例如:而不是
Sub Master1()
Application.Run "RefreshAllStaticData"
Application.OnTime Now + TimeValue("00:00:15"), "OtherSub1"
'This will cause the Bloomberg Data to not refresh until OtherSub2 and 3 have run
OtherSub2
OtherSub3
End Sub
Run Code Online (Sandbox Code Playgroud)
它应该是
Sub Master1()
Application.Run "RefreshAllStaticData"
Application.OnTime Now + TimeValue("00:00:15"), "Master2"
End Sub
Sub Master2()
OtherSub1
OtherSub2
OtherSub3
End Sub
Run Code Online (Sandbox Code Playgroud)
希望有所帮助
我在Google上搜索了BloombergUI.RefreshAllStaticData,并立即转到该Mr Excel页面:http ://www.mrexcel.com/forum/showthread.php?t=414626
我们不应该发布答案,它们仅是链接的情况,以防链接消失并带上答案。但是,我不确定我是否足够理解问题或答案以进行总结。
在可预见的将来,Google链接可能会存在。
在Excel先生内,链为:MrExcel留言板>问题论坛> Excel问题>彭博链接和宏。
关键信息似乎是:
在Bloomberg终端上,如果键入WAPI <GO>,则会找到Bloomberg API的列表和可下载的示例。
使用该区域的帮助文件信息,我们可以使用彭博数据类型库为此构建更强大的解决方案。转到工具| 参考并添加对此库的参考。然后可以使用以下代码填充单元格:
Sub Test2()
Dim vResults, vSecurities, vFields
Dim objBloomberg As BLP_DATA_CTRLLib.BlpData
'fill our arrays - must be 1 dimension so we transpose from the worksheet
With Application.WorksheetFunction
vSecurities = .Transpose(Sheet1.Range("B2:B4").Value)
vFields = .Transpose(.Transpose(Range("C1:H1").Value))
End With
Set objBloomberg = New BLP_DATA_CTRLLib.BlpData
objBloomberg.AutoRelease = False
objBloomberg.Subscribe _
Security:=vSecurities, _
cookie:=1, _
Fields:=vFields, _
Results:=vResults
Sheet1.Range("C2:H4").Value = vResults
End Sub
Run Code Online (Sandbox Code Playgroud)
一旦您试用了Excel先生的解决方案,也许您就可以更新此答案,以便将来的访问者受益。
| 归档时间: |
|
| 查看次数: |
50391 次 |
| 最近记录: |