use*_*535 1 excel vba excel-vba
在下面的代码中Errorhandler,当我输入未打开的工作簿或任何随机字符串时,可以正确处理第一个错误。但是,当我单击“重试”并再次输入一个随机名称时,会收到Subscript out of Range错误@ Workbooks(workbookname)。启用。
谁能帮助我为什么会这样以及如何使它工作。我已经尝试了很多东西。但是没有任何效果。此代码是较大程序的一部分。
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
Run Code Online (Sandbox Code Playgroud)
这里的问题是,一旦给出了类似的指令,VBA错误处理程序就不会清除错误GoTo。结果,代码认为它在您的错误处理例程中遇到了错误,因此将错误抛出堆栈。
为了清除错误,您必须调用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
Run Code Online (Sandbox Code Playgroud)
您也可以使用Err.Clear()来消除错误,但是不建议这样做。
有关更多信息,请参见此处:Excel中的错误处理