M3H*_*HD1 7 error-handling excel vba
我试图用VBA捕获一些错误,我发现本教程,我想使用GoTo
如下例子中的方法捕获错误:
Sub mySub
On Error GoTo errorHandler:
Workbooks.Open("myWorkbook")
'
' Some Code
'
errorHandler:
MsgBox "ERROR"
End Sub
Run Code Online (Sandbox Code Playgroud)
问题是,即使没有错误,该errorHandler
部分也始终执行!我发现了这个讨论,但提出的答案并没有解决
我试图添加Exit Sub
声明的问题,如下所述:
Sub mySub
On Error GoTo errorHandler:
Workbooks.Open("myWorkbook")
Exit Sub
'
' Some Code
'
errorHandler:
MsgBox "ERROR"
End Sub
Run Code Online (Sandbox Code Playgroud)
在这种情况下,即使没有错误,它也会退出方法.我也尝试过:
Sub mySub
On Error GoTo errorHandler:
Workbooks.Open("myWorkbook")
'
' Some Code
'
errorHandler:
MsgBox "ERROR"
Exit Sub
End Sub
Run Code Online (Sandbox Code Playgroud)
但仍然是同样的问题,myHandler甚至没有错误地执行.
Fio*_*ala 13
只需将Exit sub放入.
Sub mySub
On Error GoTo myHandler:
Workbooks.Open("myWorkbook")
'
' Some Code
'
Exit sub
myHandler:
MsgBox "EROOR !"
err.clear
End Sub
Run Code Online (Sandbox Code Playgroud)
这是我喜欢的模式:
Sub SomeSub()
On Error GoTo ErrorLabel
'Code goes here
ExitLabel:
'Clean-up code, if any, goes here
Exit Sub
ErrorLabel:
'Error-handling code goes here
Resume ExitLabel
End Sub
Run Code Online (Sandbox Code Playgroud)
请注意Resume
清除错误。我喜欢这种模式有几个原因:
我GoTo ExitLabel
用于Sub或Function的任何早期退出。这样,我不太可能无意间跳过清理代码。例:
Sub SomeOtherSub()
Dim x As ResourceThatNeedsToBeClosed
Dim i As Long
On Error GoTo ErrorLabel
Set x = GetX
For i = 1 To 100
If x.SomeFunction(i) Then
GoTo ExitLabel
End If
Next
ExitLabel:
x.Close
ErrorLabel:
'Error-handling code goes here
Resume ExitLabel
End Sub
Run Code Online (Sandbox Code Playgroud)