Excel VBAerror handling不适用于第二个错误

在下面的代码中,当我input一个没有打开的工作簿或任何随机string时, Errorhandler正确地处理了第一个错误。 但是,当我点击重试,再次input一个随机的名字,我得到“下Subscript out of Range ”错误@工作簿(工作簿名称)。 启用。

任何人都可以帮助我为什么这是发生的,我怎样才能使它工作。 我尝试了很多东西。 但没有任何工作。 这个代码是一个更大的程序的一部分。

 Sub test() Dim workbkname As String On Error GoTo Errorhandler Retry: workbookname = InputBox("Enter workbook name:", _ "Name Enrty") If StrPtr(workbookname) = 0 Then MsgBox ("Aborting Program") End End If Workbooks(workbookname).Activate Exit Sub Errorhandler: Response = MsgBox("Workbook " & workbookname & " not found", vbRetryCancel) If Response = 4 Then GoTo Retry End If End Sub 

这里的问题是,VBAerror handling程序不会像GoTo一样指令一旦清除错误。 因此,代码认为它在你的error handling例程中遇到了一个错误,从而引发了堆栈错误。

为了清除错误,您必须调用Resume的地方来恢复(单独Resume以再次运行错误的代码, Resume Next恢复错误之后的代码行,或Resume可以被调用后跟一个标签,如下:

 Sub ErrTest On Error Goto ErrHndl For i = 0 to 5 a = 1/i nextiLabel: Next i Exit Sub ErrHndl: Resume nextiLabel End Sub 

您也可以使用Err.Clear()来删除错误,但不太推荐。

在这里看到更多的信息: Excel中的error handling