我曾多次遇到这个问题,但始终无法解决它,但现在我需要一劳永逸地解决它。
我有一个程序一直抛出运行时错误。这不是问题,因为我在函数顶部定义了一个错误处理程序,在底部定义了一个处理程序,如下所示:
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/