摘要:我想做一些基本的错误处理
问题:当我单步执行代码时,即使没有错误,我的“错误”块数据也会运行
- 我对VBA中的错误处理很新,并且不明白为什么Error块中的代码是在我指导代码进入块的情况下运行的。在此先感谢!
代码:
Function getReports()
startJournal = Sheets("Runsheet").Range("B5")
endJournal = Sheets("Runsheet").Range("E5")
If startJournal = 0 Or endJournal = 0 Then
GoTo Error
End If
'bunch of code
Error:
MsgBox ("Error Statement")
End Function
答案 0 :(得分:7)
错误标签前需要Exit Function
即,只有在出现错误的情况下,代码才能打到标签(eh)。否则退出。
Function getReports()
on error goto eh
startJournal = Sheets("Runsheet").Range("B5")
endJournal = Sheets("Runsheet").Range("E5")
If startJournal = 0 Or endJournal = 0 Then
GoTo Error
End If
'bunch of code
Exit Function
eh:
MsgBox ("Error Statement")
End Function
查看您的代码,您可以将其编写为
Function getReports(startJournal as integer, endJournal as integer) as Boolean
If startJournal = 0 Or endJournal = 0 Then
msgbox "startJoural or endJournal should not be 0."
exit function '** exiting will return default value False to the caller
End If
'bunch of code
getReports = True
End Function
在来电者身边
if getReports(Sheets("Runsheet").Range("B5"), Sheets("Runsheet").Range("E5")) then
call faxTheReport '** This function will be called only if getReports returns true.
end if
答案 1 :(得分:1)
以下是我通常如何处理VBA代码中的错误。这是从一个自动化Internet Explorer实例(IE
变量)的类中的代码中获取的。 Log
用于通知用户发生了什么。变量DebugUser
是一个布尔值,当我是运行代码的那个时,我将其设置为true。
Public Sub MyWorkSub()
On Error GoTo e
Nav "http://www.somesite.com"
DoSomeSpecialWork
Exit Sub
e:
If Err.Number = -2147012894 Then
'timeout error
Err.Clear
Log.Add "Timed Out... Retrying"
MyWorkSub
Exit Sub
ElseIf Err.Number = -2147023170 Or Err.Number = 462 Or Err.Number = 442 Then
RecoverIE
Log.Add "Recovered from Internet Explorer Crash."
Resume
ElseIf Err.Number = 91 Then
'Page needs reloading
Nav "http://www.somesite.com"
Resume 'now with this error fixed, try command again
End If
If DebugUser Then
Stop 'causes break so I can debug
Resume 'go right to the error
End If
Err.Raise Err.Number
End Sub