|
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||
6.3 Перехват и обработка ошибок времени выполненияОтладка и обнаружение ошибок в программах VBA, ошибки времени выполнение (runtime errors), обработка ошибок времени выполнения, команда On Error GoTo, объект Err Самое тяжелые для разработчика ошибки — это ошибки времени выполнения, которые могут возникнуть по самым разным причинам: пользователь ввел недопустимое значение, файл с таким именем уже существует, сервер баз данных отказывается вставлять введенные пользователем данные, разорвано сетевое соединение и т.п. При возникновении ошибок времени выполнения обычно работа приложения аварийно завершается, а пользователю выдается встроенное сообщение, которое он вряд ли сможет расшифровать. Поэтому одна из самых трудоемких частей при создании программы на VBA — предусмотреть, какие ошибки могут возникнуть при работе пользователя и реализовать их обработку. Общий принцип обработки ошибки выглядит так:
Dim a As Integer, b As Integer, c As Integer On Error GoTo ErrorHandlerDivision c = a / b Далее в коде программы помещается метка обработчика ошибки и программный код обработки: ErrorHandlerDivision: MsgBox "Ошибка при делении" Поскольку в такой ситуации код обработчика ошибки будет выполняться даже в том случае, если ошибки не было, есть смысл поставить перед меткой обработчика команду Exit Sub (если это подпроцедура) или Exit Function (если это — функция). Полный код нашей мини-программы может выглядеть так: Private Sub UserForm_Click() Dim a As Integer, b As Integer, c As Integer On Error GoTo ErrorHandlerDivision c = a / b Exit Sub ErrorHandlerDivision: MsgBox "Ошибка при делении" End Sub Как правило, если есть возможность исправить ошибку — в обработчике ошибок ее исправляют (или предоставляют такую возможность пользователю), если нет — то выдают пользователю сообщение с объяснением и прекращают работу программы. После выполнения кода обработчика ошибки вам нужно будет сделать выбор — либо продолжить выполнение той процедуры, в которой возникла ошибка, либо прекратить ее выполнение и передать управление вызвавшей ее процедуре. В вашем распоряжении три варианта:
Resume метка Синтаксис работы с меткой — такой же, как в GoTo. Еще несколько моментов, которые связаны с обработкой ошибок:
On Error GoTo 0
Чуть подробнее о специальном объекте Err. У этого объекта — два главных свойства и два метода:
Надо сказать, что обработка ошибок — это очень надежный, но и очень ресурсоемкий метод работы. Если в вашей программе есть возможность обойтись без генерации и перехвата ошибок (например, проверить вводимое пользователем значение при помощи встроенных функций), то лучше так и делать. В то же время наличие обработчиков ошибок для того, чтобы справиться с действительно аварийными ситуациями — это большой плюс вашей программе (а зачастую и просто необходимость).
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||
Получить учебные материалы по этому курсу |
||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||