vb6 - 重试运行时错误

标签 vb6 error-handling

我曾多次遇到这个问题,但始终无法解决它,但现在我需要一劳永逸地解决它。

我有一个程序一直抛出运行时错误。这不是问题,因为我在函数顶部定义了一个错误处理程序,在底部定义了一个处理程序,如下所示:

retryConcat:
On Local Error GoTo concatErr
    'Some Code here
    Exit Sub
concatErr:
    If MsgBox("Could not append the receipt for this transaction to the Receipt viewer logs.", vbExclamation + vbRetryCancel, "Warning - Missing Receipt") = vbRetry Then
        err.Clear
        GoTo retryConcat
    End If

错误处理程序包含一个消息框,允许用户在需要时重试。现在这是让我困惑的部分。第一次抛出错误时,它会显示消息框并允许用户按预期重试。然后程序跳转到适当的行并重试。然而,第二次抛出错误时,它不会跳转到错误处理程序,而是跳出过程,而父级中的错误处理程序会捕获它!

所以我的问题是为什么它会在后续抛出时跳转到父错误处理程序。我的代码中很多地方都会发生这种情况。在许多情况下,我可以手动检查错误,我可以将代码放在 while 循环中来解决它,但对于运行时错误,我被迫使用错误捕获,它以这种相当烦人的方式起作用。

如有任何帮助或建议,我们将不胜感激。

最佳答案

您需要使用Resume retryConcat

当发生错误时,会跳转到concatErr:的错误句柄中。然后显示消息框,如果用户选择重试,代码就会跳转到 retryConcat。由于您使用了 Goto,它不会退出错误处理程序,因此下次发生错误时,它已经在错误处理程序中,别无选择,只能将错误沿着链向上提升到调用方程序。

使用Resume concatRetry允许它退出错误处理程序并在所需的点恢复,这意味着下次错误发生时,它可以再次处理。

如果您将错误处理程序想象为一种状态,而不是一段代码,这可能会更容易理解。

关于vb6 - 重试运行时错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12603698/

相关文章:

php - 寻找通用的 PHP error_handler

api - 使用Axios进行API调用时Express中的错误处理

oracle - 如何让 "Microsoft ODBC for Oracle"驱动程序在 Windows 7 中工作

vba - 指向存储为集合/字典项的数组的指针 VBA

c# - 确定 Server.Transfer[Request] 是否被执行

php - 错误未在PHP中显示

ruby-on-rails - Sidekiq和Twilio闯入 worker “wrong number of arguments (1 for 2)”

vb6 - 编辑框更新时如何收到通知

windows - 从 VBA 代码调用 SFTP 进程

mysql - VB6 ADO 断开连接的记录集不返回任何记录