You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何实现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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 18:22:21