重试运行时错误

时间:2012-09-26 14:12:48

标签: 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循环中来解决它,但是由于运行时错误,我被迫使用错误捕获,这会以这种相当烦人的方式起作用。

任何帮助或建议都将不胜感激。

1 个答案:

答案 0 :(得分:3)

您需要使用Resume retryConcat

发生错误时,它会跳转到concatErr:的错误句柄。然后,您将显示消息框,如果用户选择重试,则代码将跳转到retryConcat。因为你使用Goto,它不会退出错误处理程序,所以下次发生错误时,它已经在错误处理程序中,别无选择,只能将链上的错误提升到调用过程。 / p>

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

如果您认为错误处理程序是状态而不是代码的一部分,那么它可能会更容易理解。