VBA при сообщениях об ошибках | 3 основных способа исправления ошибок

Vba продолжить код при ошибке

On Error GoTo line (строка ) On Error GoTo line
On Error Resume Next On Error Resume Next
**On Error GoTo 0** **On Error GoTo 0**

Синтаксис оператора On Error может принимать любую из следующих форм: The On Error statement syntax can have any of the following forms:

Аргумент line представляет собой любую метку строки или любой номер строки. The line argument is any line label or line number.

При возникновении ошибки во время выполнения Управление ветвями осуществляется до строки, что приводит к активации обработчика ошибок. If a run-time error occurs, control branches to line, making the error handler active.

Указанная строка должна быть в той же процедуре, что и оператор On Error; в противном случае происходит ошибка во время компиляции. The specified line must be in the same procedure as the On Error statement; otherwise, a compile-time error occurs.

Примечания Remarks

Если оператор On Error не используется, любая случившаяся ошибка выполнения является неустранимой; то есть в этом случае отображается сообщение об ошибке и выполнение прекращается. If you don’t use an On Error statement, any run-time error that occurs is fatal; that is, an error message is displayed and execution stops.

Если вызывающая процедура содержит включенный обработчик ошибок, он активируется для обработки ошибки. If the calling procedure has an enabled error handler, it is activated to handle the error. Если обработчик ошибок вызывающей процедуры также активный, управление передается обратно через предыдущие вызывающие процедуры до тех пор, пока не будет найден включенный, но неактивный обработчик. If the calling procedure’s error handler is also active, control passes back through previous calling procedures until an enabled, but inactive, error handler is found. Если не удается найти неактивный включенный обработчик ошибок, ошибка является неустранимой в той точке, в которой она фактически произошла. If no inactive, enabled error handler is found, the error is fatal at the point at which it actually occurred.

Процедуры обработки ошибок основываются на значении свойства Number объекта Err для определения причины ошибки. Error-handling routines rely on the value in the Number property of the Err object to determine the cause of the error. Программа обработки ошибок должна проверить или сохранить соответствующие значения свойства в объекте Err, прежде чем может произойти любая другая ошибка или прежде чем будет вызвана процедура, которая может вызвать ошибку. The error-handling routine should test or save relevant property values in the Err object before any other error can occur or before a procedure that might cause an error is called. Значения свойства в объекте Err отражают только самую последнюю ошибку. The property values in the Err object reflect only the most recent error. Сообщение об ошибке, связанное с Err. Number, содержится в Err. Description. The error message associated with Err. Number is contained in Err. Description.

On Error Resume Next вызывает продолжение выполнения с оператора, сразу же следующего за оператором, вызвавшим ошибку выполнения, или с оператора, сразу же следующего за последним вызовом процедуры, содержащей оператор On Error Resume Next. On Error Resume Next causes execution to continue with the statement immediately following the statement that caused the run-time error, or with the statement immediately following the most recent call out of the procedure containing the On Error Resume Next statement. Этот оператор разрешает продолжать выполнение несмотря на ошибку выполнения. This statement allows execution to continue despite a run-time error. Можно поместить программу обработки ошибок туда, где может произойти ошибка, вместо того чтобы переносить управление в другое местоположение в процедуре. You can place the error-handling routine where the error would occur, rather than transferring control to another location within the procedure. Оператор On Error Resume Next становится неактивным, когда вызывается другая процедура, поэтому следует выполнять оператор On Error Resume Next в каждой вызываемой программе, если нужно обрабатывать внутренние ошибки в этой программе. An On Error Resume Next statement becomes inactive when another procedure is called, so you should execute an On Error Resume Next statement in each called routine if you want inline error handling within that routine.

При обработке ошибок, возникающих при обращении к другим объектам, конструкция On Error Resume Next предпочтительнее, чем On Error GoTo. The On Error Resume Next construct may be preferable to On Error GoTo when handling errors generated during access to other objects. Проверка объекта Err после каждого взаимодействия с объектом позволяет устранить неоднозначность в плане того, к какому объекту обращался код. Checking Err after each interaction with an object removes ambiguity about which object was accessed by the code. Вы можете точно определить, какой объект поместил код ошибки в свойство Err. Number, а также какой объект изначально сгенерировал ошибку (объект, указанный в свойстве Err. Source). You can be sure which object placed the error code in Err. Number, as well as which object originally generated the error (the object specified in Err. Source).

Оператор On Error GoTo 0 отключает обработку ошибок в текущей процедуре. On Error GoTo 0 disables error handling in the current procedure. Он не указывает строку 0 в качестве начала кода обработки ошибки, даже если процедура содержит строку с номером 0. It doesn’t specify line 0 as the start of the error-handling code, even if the procedure contains a line numbered 0. Без оператора On Error GoTo 0 обработчик ошибок автоматически отключается, когда выполняется выход из процедуры. Without an On Error GoTo 0 statement, an error handler is automatically disabled when a procedure is exited.

Чтобы не допустить выполнения кода обработки ошибки, когда ошибка не произошла, поместите оператор Exit Sub, Exit Function или Exit Property непосредственно перед программой обработки ошибок, как показано в следующем фрагменте: To prevent error-handling code from running when no error has occurred, place an Exit Sub, Exit Function, or Exit Property statement immediately before the error-handling routine, as in the following fragment:

Неперехваченные ошибки в объектах возвращаются в управляющее приложение, когда объект выполняется как исполняемый файл. Untrapped errors in objects are returned to the controlling application when the object is running as an executable file. В среде разработки неперехваченные ошибки только возвращаются в управляющее приложение, если заданы надлежащие параметры. Within the development environment, untrapped errors are only returned to the controlling application if the proper options are set. Следующие сведения см. в документации ведущего приложения: какие параметры следует задать во время отладки, как задать эти параметры, может ли ведущее приложение создавать классы. See your host application’s documentation for a description of which options should be set during debugging, how to set them, and whether the host can create classes.

Если создается объект, имеющий доступ к другим объектам, следует попытаться обработать ошибки, передаваемые из этих объектов необработанными. If you create an object that accesses other objects, you should try to handle errors passed back from them unhandled. Если вам не удается обрабатывать такие ошибки, сопоставьте код ошибки в Err. Number с одной из собственных ошибок и затем передайте их обратно вызывающей стороне объекта. If you cannot handle such errors, map the error code in Err. Number to one of your own errors, and then pass them back to the caller of your object. Следует указать ошибку, добавив код ошибки в константу vbObjectError. You should specify your error by adding your error code to the vbObjectError constant. Например, если код вашей ошибки — 1052, назначьте его следующим образом: For example, if your error code is 1052, assign it as follows:

Пример Example

В этом примере сначала используется оператор On Error GoTo для указания местоположения программы обработки ошибок в процедуре. This example first uses the On Error GoTo statement to specify the location of an error-handling routine within a procedure. В примере попытка удалить открытый файл генерирует ошибку номер 55. In the example, an attempt to delete an open file generates error number 55. Ошибка обрабатывается в программе обработки ошибок, и затем управление возвращается к оператору, вызвавшему ошибку. The error is handled in the error-handling routine, and control is then returned to the statement that caused the error. Оператор On Error GoTo 0 выключает перехват ошибок. The On Error GoTo 0 statement turns off error trapping.

Затем оператор On Error Resume Next используется, чтобы отложить перехват ошибок таким образом, чтобы контекст ошибки, созданный следующим оператором, мог быть известен для определенных. The On Error Resume Next statement is then used to defer error trapping so that the context for the error generated by the next statement can be known for certain. Обратите внимание, что Err. Clear используется для очистки свойств объекта Err после обработки ошибки. Note that Err. Clear is used to clear the Err object’s properties after the error is handled.

См. также See also

Поддержка и обратная связь Support and feedback

Включает алгоритм обнаружения ошибок и, в случае возникновения ошибки, передает управление операторам обработчика ошибок с указанной в выражении строки. Stroka – это метка, после которой расположены операторы обработчика ошибок.

Включает алгоритм обнаружения ошибок и, в случае возникновения ошибки, передает управление оператору, следующему за оператором, вызвавшем ошибку.

Отключает любой включенный обработчик ошибок в текущей процедуре.

Простой обработчик ошибок

Шаблон простейшего обработчика ошибок:

Оператор On Error GoTo размещается в начале процедуры, метка и обработчик ошибок – в конце процедуры. Название метки можно сменить на другое, в том числе на кириллице. Exit Sub обеспечивает выход из процедуры, если блок операторов выполнен без ошибок.

Для вывода описания ошибки используется свойство Description объекта Err.

Примеры обработки ошибок

Пример 1
Деление на ноль:

Результат выполнения кода VBA Excel с обработчиком ошибок:

Пример 2
Выход за границы диапазона:

Результат выполнения кода VBA Excel с оператором On Error GoTo :

Пример использования выражений On Error Resume Next и On Error GoTo 0 смотрите в статье: Отбор уникальных значений с помощью Collection.

Источники:

https://ru. mcfairbanks. com/1790-vba-on-error

https://web-shpargalka. ru/on-error-resume-next-vba-kak-rabotaet. php

Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: