如何在VBA中无需粘贴至Excel单元格调用Bloomberg BDP公式?
在VBA中直接调用Bloomberg BDP函数(无需依赖单元格)
当然可以!你完全不用把BDP公式粘贴到Excel单元格里,直接通过Bloomberg的COM API就能在VBA内部完成数据获取和计算,我给你详细讲讲怎么做:
前提准备
首先要确保你的Bloomberg终端已登录,并且VBA能访问Bloomberg的API:
- 打开VBA编辑器(按
Alt+F11) - 点击顶部菜单的
工具→引用 - 在弹出窗口中找到并勾选
Bloomberg Data Control或Bloomberg Desktop API(具体名称可能因终端版本略有差异) - 点击确定保存引用
直接调用BDP的VBA代码示例
下面是完整的实现代码,直接在VBA中获取标的的PX_LAST值,并完成除以100的计算:
Sub GetBDPDataWithoutCell() Dim blpAPI As Bloomberg.Data.1 ' 早期绑定,需提前引用库 Dim targetSecurity As String Dim targetField As String Dim rawResult As Variant Dim calculatedValue As Double ' 初始化Bloomberg API对象 Set blpAPI = New Bloomberg.Data.1 ' 设置查询参数:证券代码最好加上市场后缀,确保查询准确 targetSecurity = "XYZ US Equity" targetField = "PX_LAST" ' 调用BDP接口获取数据 rawResult = blpAPI.BDP(targetSecurity, targetField) ' 处理返回结果 If Not IsError(rawResult) Then ' 执行你需要的计算(比如除以100) calculatedValue = rawResult / 100 ' 这里可以直接使用计算后的值,比如打印到立即窗口,或者赋值给变量用于后续逻辑 Debug.Print "原始最新价格: " & rawResult Debug.Print "计算后的值: " & calculatedValue ' 示例:将结果存入变量用于其他计算 Dim furtherCalculation As Double furtherCalculation = calculatedValue * 1.5 Debug.Print "二次计算结果: " & furtherCalculation Else ' 处理查询失败的情况 Debug.Print "BDP查询失败,错误信息: " & rawResult End If ' 释放对象,避免内存泄漏 Set blpAPI = Nothing End Sub
晚期绑定(无需手动引用库)
如果你不想手动设置引用(比如要兼容不同版本的Bloomberg终端),可以用晚期绑定的方式,代码调整如下:
Sub GetBDPDataLateBinding() Dim blpAPI As Object Dim targetSecurity As String Dim targetField As String Dim rawResult As Variant Dim calculatedValue As Double ' 晚期绑定初始化对象 Set blpAPI = CreateObject("Bloomberg.Data.1") targetSecurity = "XYZ US Equity" targetField = "PX_LAST" rawResult = blpAPI.BDP(targetSecurity, targetField) If Not IsError(rawResult) Then calculatedValue = rawResult / 100 Debug.Print "计算后的值: " & calculatedValue Else Debug.Print "查询失败: " & rawResult End If Set blpAPI = Nothing End Sub
注意事项
- 证券代码一定要写完整:比如
XYZ要补充为XYZ US Equity,否则Bloomberg可能无法识别正确标的 - 确保Bloomberg终端处于登录状态,API才能正常返回数据
- 如果需要查询多个字段或多只证券,可以扩展代码使用
BDS或BDH接口(对应批量数据和历史数据)
内容的提问来源于stack exchange,提问作者Pauul Aschenbrenner
相关产品推荐
相关产品推荐

