VBA按钮调用Bloomberg数据遇#N/A Requesting错误求解
Bloomberg VBA 拉取数据重复运行报错排查与解决
问题原因分析
首次运行有效、后续返回#N/A Requesting,基本可以排除代码语法错误,核心原因大概率是:
- Bloomberg的BDP接口是异步加载,直接用
Application.Run赋值时,第二次请求可能还处于数据处理中,未返回有效结果; - 短时间内重复触发请求,触发了Bloomberg的请求频率限制,导致接口返回待处理状态;
- 单元格残留的旧请求状态干扰了新请求的返回值。
针对性解决办法
1. 等待请求完成再赋值
通过循环检查并等待Bloomberg返回有效数据,避免异步加载未完成就赋值:
Sub RefreshBloombergData() Dim ticker As String Dim result As Variant ticker = Range("C9").Value ' 先清空目标单元格旧状态 Range("D9").ClearContents ' 发起BDP请求 result = Application.Run("BDP", ticker & " BGN Curncy", "RQ002") ' 最多等待10秒,直到返回非错误结果(可调整等待时长) Dim waitStart As Double waitStart = Timer Do While IsError(result) And (Timer - waitStart) < 10 DoEvents ' 释放Excel资源,让Bloomberg完成数据加载 result = Application.Run("BDP", ticker & " BGN Curncy", "RQ002") Loop ' 赋值或提示失败 If Not IsError(result) Then Range("D9").Value = result Else MsgBox "数据拉取超时或失败", vbExclamation End If End Sub
2. 防止重复触发请求
添加按钮锁定逻辑,避免短时间内多次点击触发高频请求:
' 模块级变量,放在所有Sub代码外部 Dim isRequesting As Boolean Sub RefreshBloombergData() ' 如果正在请求,直接退出 If isRequesting Then Exit Sub isRequesting = True ' 这里放上面的请求逻辑代码... ' 请求结束解锁 isRequesting = False End Sub
3. 验证字段与权限
- 用Bloomberg终端的
FLDS命令,确认RQ002/PR002字段是否适用于你查询的货币对; - 检查Bloomberg终端连接状态,确保没有权限限制或掉线情况。
内容的提问来源于stack exchange,提问作者Ashley Lin
相关产品推荐
相关产品推荐

