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