求助:如何实现Excel表格刷新至无值错误后执行发布宏
循环刷新表格至无错误值后执行发布宏
你的现有VBA代码存在语法错误,VBA不支持while bool in Range这种写法,而且没实现错误值的检测逻辑。结合你需要处理Bloomberg异步公式的需求,下面是修正后的完整代码:
Sub RefreshUntilNoError() Dim targetRange As Range Dim cell As Range Dim hasError As Boolean Dim refreshCount As Integer ' 指定要检查的目标区域 Set targetRange = ThisWorkbook.Sheets("SOFR Close").Range("C23:BQ264") refreshCount = 0 Do hasError = False refreshCount = refreshCount + 1 ' 刷新指定工作表 ThisWorkbook.Sheets("SOFR Close").Calculate ' 等待Bloomberg公式异步计算完成(可根据实际响应速度调整等待时长) Application.Wait Now + TimeValue("00:00:02") ' 遍历区域检查目标错误值 For Each cell In targetRange If IsError(cell.Value) Then ' 匹配#Value和#Err-User Err两种错误 Select Case cell.Value Case CVErr(xlErrValue), "#Err-User Err" hasError = True Exit For ' 找到错误直接跳出循环,无需继续检查 End Select End If Next cell ' 设置最大刷新次数,防止无限循环 If refreshCount > 10 Then MsgBox "已尝试刷新10次仍存在错误,停止操作" Exit Do End If Loop While hasError ' 只要存在错误就继续循环 ' 确认无错误后执行发布宏 If Not hasError Then Call PublishMacro ' 替换成你实际的发布宏名称 MsgBox "表格刷新完成,已执行发布宏" End If End Sub
关键说明
- 错误值检测逻辑:通过
IsError识别错误单元格,再精准匹配#Value(对应VBA常量xlErrValue)和自定义错误文本#Err-User Err - 异步刷新处理:Bloomberg公式属于异步刷新,添加
Application.Wait确保计算完成后再判断,避免因未加载完成导致的误判 - 防死循环机制:设置最大刷新次数,避免因公式永久错误导致程序无限运行
- 宏调用替换:将代码中的
PublishMacro替换为你实际的发布宏名称即可
额外建议
如果Bloomberg有专属的VBA刷新方法(比如RefreshAll或官方API提供的函数),可以替换Sheets("SOFR Close").Calculate,刷新效率会更高;等待时长也可根据你的网络和响应速度调整,比如改成00:00:01或00:00:03。
内容的提问来源于stack exchange,提问作者IJUT
相关产品推荐
相关产品推荐

