首页 > 解决方案 > 从错误处理程序重新启动子例程

问题描述

我有一个代码通过消息框通知用户错误并提示用户重试或取消。我希望代码做的是,如果用户按下“重试”,vba 将重新执行代码:

Sub CheckDate ()

Dim R as VbMsgBoxResult

On Error GoTo i

  Vba.Date = Range("A1").Value

Exit Sub

i:
Msgbox "An error has occurred, would you like to retry?", VbRetryCancel
If R = VbRetry Then ' **re-execute the code**

End Sub

标签: excelvba

解决方案


一些建议,避免使用 goto 语句,因为它们会导致代码杂乱无章且难以遵循。使用IsDate将允许 VBA 检查日期而不发生错误。使用括号可以是一种更简洁的方式引用范围您不需要将响应声明为变量,只需测试提示的结果即可。最后,如果用户希望重试,您可以只调用宏。

Sub CheckDate ()
  if IsDate([A1].Value) then 
     Vba.Date = [A1].Value
  else
     if Msgbox("An error has occurred, would you like to retry?", VbRetryCancel) = VbRetry Then CheckDate
  end if 
End Sub

推荐阅读