如何点击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
相关产品推荐
相关产品推荐

