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

如何点击Cancel按钮终止VBA中的Do Until循环?

解决点击Cancel终止Do...Until循环的问题

你的代码里存在两个关键问题,导致点击Cancel按钮无法终止循环:

  • Do循环内部没有重新获取MsgBox的返回值,Response始终是第一次的vbRetry,永远触发不了Cancel的判断逻辑
  • 嵌套的While Response = vbCancel循环完全多余,逻辑也不成立,根本不会执行到Exit Do

以下是修正后的完整代码:

If Db_Connection() = False Then
    Dim Response As VbMsgBoxResult, Msg As String, Style As VbMsgBoxStyle, Title As String
    Msg = "数据库连接出错"
    Style = vbRetryCancel Or vbCritical Or vbDefaultButton1
    Title = "连接错误"
    Response = MsgBox(Msg, Style, Title)

    If Response = vbRetry Then
        ' 重试数据库连接
        Do Until Db_Connection() = True
            Response = MsgBox(Msg, Style, Title) ' 每次弹出弹窗后更新Response的值
            If Response = vbCancel Then ' 判断是否点击了Cancel
                Exit Do ' 终止Do循环
            End If
        Loop

        ' 只有连接成功才提示,避免用户取消后也弹出成功提示
        If Db_Connection() = True Then
            MsgBox("连接已建立", vbOKOnly + vbInformation, "数据库连接")
        End If
    End If
Else
    If status = False Then
        MsgBox("站点名称或站点代码已存在", vbOKOnly + vbQuestion, "重复数据")
    End If
End If

关键修改点说明:

  • 修正变量声明:Response应声明为VbMsgBoxResult类型,原代码的声明方式仅Title为String类型,其余为Variant,易引发问题
  • 在Do循环内部每次调用MsgBox时,将返回值赋值给Response,确保能获取最新的用户操作
  • 每次获取Response后立即判断是否为vbCancel,一旦满足就用Exit Do终止循环
  • 循环结束后增加判断,仅当连接确实成功时才弹出成功提示,避免用户取消后出现错误提示

内容的提问来源于stack exchange,提问作者Malith Induranga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 15:57:18