In previous sections of this chapter, you've used the On Error GoTo statement to jump to an error-handling subroutine and then resume running the rest of your code. You can also handle errors without branching to a subroutine.
If you anticipate that a particular statement might cause an error, include an On Error Resume Next statement before the potential error-causing statement to prevent the application from being interrupted. You can then test the value of the Err function and proceed accordingly.
The following procedure is a revision of the FileExists procedure shown earlier in this chapter. This revised version doesn't branch to a subroutine; instead, it handles errors in-line.
Function FileExists(filename)
Dim Msg
Const ERR_DISKNOTREADY = 71, ERR_DEVICEUNAVAILABLE = 68
' Resets the Err code to zero; handles errors inline
On Error Resume Next
CheckOnFile:
FileExists = (Dir(filename) <> "")
If Err = ERR_DISKNOTREADY Then
Msg = "Put a floppy disk in the drive and close the drive door."
If MsgBox (Msg, vbExclamation + vbOKCancel) = vbOK Then
GoTo CheckOnFile
End If
FileExists = False
ElseIf Err = ERR_DEVICEUNAVAILABLE Then
Msg = "This drive or path doesn't exist: " & filename
MsgBox Msg, vbExclamation
FileExists = False
' If not successful, and if not one of the above errors, handle
ElseIf Err <> 0 Then
Msg = "Unexpected error #" & Str(Err) & ": " & Error(Err)
MsgBox Msg, vbCritical
FileExists = False
End If
End Function