В вашем коде Errorhandler
- это просто метка строки , с оператором On Error
, перенаправляющим оценку на эту метку в случае ошибки.
Таким образом, рассмотримчто VBA не различает метку строки, используемую для обработки ошибок, или любую другую метку строки, используемую в сочетании с любым другим оператором GoTo
, или метку строки, на которую вообще нет ссылки.
При отсутствии ошибки ваш код эквивалентен:
Private Sub cmdOpenPDF_Click()
Application.FollowHyperlink "E:\groups\folder\folder2\" & Dir("E:\groups\folder\folder2\*" & Me.txtInvNum & "*")
Errorhandler:
MsgBox "Unable to locate the file. I'm sorry this has happened.", vbOKOnly
Exit Sub
End Sub
Здесь VBA покорно выполнит метод FollowHyperlink
, за которым следует функция MsgBox
, а затем, наконец, Exit Sub
оператор.
Чтобы избежать обработки обработчика ошибок каждый раз, типичная реализация обработчика ошибок будет включать дополнительную метку, обозначающую чистый выход перед меткой обработчика ошибок, например:
Private Sub cmdOpenPDF_Click()
On Error GoTo Errorhandler
Application.FollowHyperlink "E:\groups\folder\folder2\" & Dir("E:\groups\folder\folder2\*" & Me.txtInvNum & "*")
ExitSub:
Exit Sub
Errorhandler:
MsgBox "Unable to locate the file. I'm sorry this has happened.", vbOKOnly
Resume ExitSub
End Sub
Это означает, что в нормальных условиях оператор Exit Sub
будет достигнут до оценки кода, следующего за меткой Errorhandler
.