excel - 从错误处理程序重新启动子例程
问题描述
我有一个代码通过消息框通知用户错误并提示用户重试或取消。我希望代码做的是,如果用户按下“重试”,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
解决方案
一些建议,避免使用 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
推荐阅读
- swift - 在 Swift 中删除分组 UITableView 上方的空间
- python - 将 Python 属性绑定到 C++ 扩展上的 C++ 变量
- typescript - 打字稿:在VScode中重命名字符串文字类型
- reporting-services - 无法显示报告。(rsprocessingaborted)在 CRM 2016
- python - 为什么 scipy.optimize.curce 拟合函数不能正确拟合数据点,为什么要给出较大的 pfit 值?
- facebook - 在 Xamarin 中使用 AWS Cognito 成功进行 Facebook 身份验证后无法检索用户数据
- python - 通过 Flask-SQL Alchemy 创建关联对象在 shell 中按预期工作,但在 Flask 路由中产生 JSON 错误
- java - 竞争条件:整数的最小值和最大值范围
- android - 如何将 Activity 转换为 Fragment?
- elasticsearch - 如何搜索多个 geo_distance 查询