Bloomberg实时更新切换宏失效求助:BFXFORWARD函数无法刷新
问题分析与解决办法
你的宏逻辑完全搞反了——SuspendBloombergRealtimeData True是暂停实时更新,这时候刷新工作簿,BFXFORWARD函数根本没法连接Bloomberg获取数据,自然一直卡在#N/A Requesting Data...。
正确的逻辑应该是先开启实时更新,等数据刷新完成后再暂停,修正后的VBA代码如下:
Sub RefreshBFXForwardData() ' 1. 恢复Bloomberg实时更新(确保处于启用状态) Application.Run "SuspendBloombergRealtimeData", False ' 2. 刷新工作簿 Application.Run "RefreshEntireWorkbook" ' 3. 等待数据加载(可根据实际响应时间调整秒数,比如改成10秒) Application.Wait Now + TimeValue("00:00:08") ' 或者用更可靠的循环等待(直到目标单元格不再显示#N/A,最多等20秒) ' Dim startTime As Date ' startTime = Now ' Do While Range("A1").Value = "#N/A Requesting Data..." And Now < startTime + TimeValue("00:00:20") ' DoEvents ' 让Excel响应Bloomberg的回调 ' Loop ' 4. 暂停实时更新,符合IT限制要求 Application.Run "SuspendBloombergRealtimeData", True End Sub
关键注意点:
- 确认
SuspendBloombergRealtimeData的参数:False是恢复实时更新,True是暂停,别搞反。 - 等待时间不能太短:Bloomberg获取非标准日期的远期数据可能需要几秒,默认5秒不够就调长到8-10秒。
- 循环等待比固定Wait更可靠:如果用循环检查目标单元格(把示例里的A1改成你写公式的单元格位置),可以避免等待过长或不足的问题,
DoEvents能让Excel及时处理Bloomberg的数据回调。 - 若整个工作簿刷新太耗时,可以只刷新包含BFXFORWARD的区域,比如用
Range("你的公式区域").Refresh替换RefreshEntireWorkbook,进一步缩短实时更新开启的时间。
内容的提问来源于stack exchange,提问作者JaminInC
相关产品推荐
相关产品推荐

