1. Главная страница » Компьютеры » On error resume next что это

On error resume next что это

Автор: | 16.12.2019

Активизирует подпрограмму обработки ошибок и указывает положение подпрограммы в процедуре; используется также для отключения подпрограммы обработки ошибок.

  • On Error GoTo строка — Активизирует подпрограмму обработки ошибок, начало которой определяется обязательным аргументом строка, значением которого может быть любая метка строки или номер строки. Если возвращается ошибка выполнения, управление передается на указанную строку и запускается обработчик ошибок. Аргумент строка должен определять строку в той же процедуре, в которой находится инструкция On Error; в противном случае возникает ошибка компиляции.
  • On Error Resume Next — Указывает, что возникновение ошибки выполнения приводит к передаче управления на инструкцию, непосредственно следующую за инструкцией, при выполнении которой возникла ошибка. Рекомендуется при доступе к объектам использовать эту форму инструкции, а не On Error GoTo.
  • On Error GoTo 0 — Отключает любой активизированный обработчик ошибок в текущей процедуре.

Если не выполнена инструкция On Error, то любая ошибка выполнения является фатальной; это означает, что выводится сообщение об ошибке и выполнение программы прекращается.

"Включенным" обработчиком ошибок называют подпрограмму, которая указана в инструкции On Error; "активным" обработчиком ошибок является включенный обработчик ошибок, который обрабатывает текущую ошибку. Если ошибка возникает в самом обработчике ошибок (в промежутке между возникновением ошибки и выполнением инструкции Resume, Exit Sub, Exit Function или Exit Property), то обработчик ошибок, определенный в текущей процедуре, не может обработать ошибку. Управление в этом случае возвращается в вызывающую процедуру; если в вызывающей процедуре включен обработчик ошибок, то обработка ошибки передается ему. Если этот обработчик ошибок является в данный момент активным, т.е. уже обрабатывает ошибку, то управление снова передается назад в вызывающую процедуру и т.д. до тех пор, пока не будет найден включенный, но не активный обработчик ошибок. Если включенный, но неактивный обработчик ошибок найден не будет, ошибка становится фатальной в том месте программы, в котором она впервые возникла. При каждой передаче управления обработчиком ошибок в вызывающую процедуру эта процедура становится текущей. После завершения обработки ошибки обработчиком в любой процедуре возобновляется выполнение текущей процедуры с той ее части, которая указана в инструкции Resume.

Подпрограмма обработки ошибок не может быть процедурой Sub или Function. Эта подпрограмма должна быть частью программы, которая отмечается с помощью метки строки или номера строки.

Для определения причины ошибки в подпрограммах обработки ошибок используют значение свойства Number объекта Err. Необходимо обеспечить в подпрограммах обработки ошибок проверку или сохранение существенных значений свойств объекта Err перед тем, как может возникнуть новая ошибка или перед вызовом процедуры, в которой может возникнуть новая ошибка. Значения свойств объекта Err описывают последнюю ошибку. Текст сообщения об ошибке, соответствующего коду ошибки Err.Number содержится в свойстве Err.Description.

Конструкция On Error Resume Next задает продолжение выполнения с инструкции, непосредственно следующей за инструкцией, которая привела к ошибке выполнения, или с инструкции, непосредственно следующей за вызывающей инструкцией в процедуре, содержащей конструкцию On Error Resume Next. Это позволяет продолжить исполнение программы несмотря на ошибку выполнения. Это позволяет также встроить подпрограмму обработки ошибок в процедуру, а не передавать управление в другую часть процедуры. Конструкция On Error Resume Next становится неактивной при вызове новой процедуры, поэтому для внутренней обработки ошибок необходимо выполнять инструкцию On Error Resume Next в каждой вызываемой процедуре.

При обработке ошибок, возникающих при доступе к другим объектам, рекомендуется использовать конструкцию On Error Resume Next, а не конструкцию On Error GoTo. Проверка объекта Err после каждого взаимодействия с другим объектом позволяет устранить неопределенность в том, при доступе к какому объекту возникла ошибка. Это позволяет всегда точно знать, какой объект поместил значение кода ошибки в свойство Err.Number, а также в каком объекте возникла ошибка (эта информация содержится в свойстве Err.Source).

Конструкция On Error GoTo 0 отключает обработку ошибок в текущей процедуре. Эта конструкция не задает переход на строку 0 для обработки ошибок, даже если в процедуре имеется строка с номером 0. Если инструкция On Error GoTo 0 не выполнялась, то обработчик автоматически отключается при выходе из процедуры.

Для того, чтобы предотвратить выполнение программы обработки ошибок в тех случаях, когда ошибка не возникла, следует помещать соответствующую инструкцию Exit Sub, Exit Function или Exit Property сразу после подпрограммы обработки ошибки, как в следующем примере:

В этом примере программа обработки ошибок помещена между инструкциями Exit Sub и End Sub, что позволяет отделить ее от части программы, соответствующей нормальному выполнению процедуры. Программу обработки ошибок можно разместить в любом месте процедуры.

Ошибки, которые не были перехвачены, возвращаются в управляющее приложение, если объект был запущен как исполняемый файл. В среде разработчика такие ошибки возвращаются в управляющее приложение только при указании соответствующих параметров. За описанием необходимых значений этих параметров и способов их задания следует обращаться к документации главного приложения. Там же следует проверить, позволяет ли главное приложение создавать классы.

Системные ошибки при вызовах библиотек динамической компоновки (DLL) не приводят к возникновению исключений и не перехватываются средствами Visual Basic. При вызове функций из библиотек DLL необходимо проверять, успешно ли возвращается каждое значение (согласно спецификациям API), и в случае неудачи проверять значение свойства LastDLLError объекта Err.

Читайте также:  Foxconn 865m07 gv 6ls характеристики

Включает программу обработки ошибок и указывает местоположение этой программы в процедуре; также может использоваться для отключения программы обработки ошибок. Enables an error-handling routine and specifies the location of the routine within a procedure; can also be used to disable an error-handling routine.

Синтаксис Syntax

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:

Statement Statement Описание Description
On Error GoTo line (строка ) On Error GoTo line Включает подпрограмму обработки ошибок, которая начинается со строки , указанной в __ аргументеLine. Enables the error-handling routine that starts at line specified in the required line argument.

Аргумент 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.

On Error Resume Next On Error Resume Next Указывает, что при возникновении ошибки во время выполнения управление переходит к оператору , непосредственно следующему за оператором, в котором произошла ошибка, и выполнение продолжается. Specifies that when a run-time error occurs, control goes to the statement immediately following the statement where the error occurred and execution continues. Используйте эту форму вместо On Error GoTo при доступе к объектам. Use this form rather than On Error GoTo when accessing objects. On Error GoTo 0 On Error GoTo 0 Отключает любой включенный обработчик ошибок в текущей процедуре. Disables any enabled error handler in the current procedure.

Примечания 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.

"Включенный" обработчик ошибок — это обработчик, включенный оператором On Error; "активный" обработчик — это включенный обработчик, который находится в процессе обработки ошибки. An "enabled" error handler is one that is turned on by an On Error statement; an "active" error handler is an enabled handler that is in the process of handling an error. Если ошибка возникает при возникновении активности обработчика ошибок (между возникновением ошибки и возобновлением , выходом функции Sub, Exit Functionили выходным оператором Property ), обработчик ошибок текущей процедуры не может обработать ошибку. If an error occurs while an error handler is active (between the occurrence of the error and a Resume, Exit Sub, Exit Function, or Exit Property statement), the current procedure’s error handler can’t handle the error. Управление возвращается к вызывающей процедуре. Control returns to the calling procedure.

Если вызывающая процедура содержит включенный обработчик ошибок, он активируется для обработки ошибки. 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.

Каждый раз, когда обработчик ошибок передает управление обратно вызывающей процедуре, эта процедура становится текущей процедурой. Each time the error handler passes control back to a calling procedure, that procedure becomes the current procedure. После обработки ошибки обработчиком ошибок в любой процедуре выполнение возобновляется в текущей процедуре с точки, указанной оператором Resume . After an error is handled by an error handler in any procedure, execution resumes in the current procedure at the point designated by the Resume statement.

Подпрограмма обработки ошибок не является процедурой Sub или Function . An error-handling routine is not a Sub procedure or Function procedure. Это фрагмент кода, отмеченный меткой строки или номером строки. It is a section of code marked by a line label or line number.

Процедуры обработки ошибок основываются на значении свойства 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.

Читайте также:  Cooler master cosmos s rc 1100

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:

Ниже приведен код обработки ошибок, который следует за оператором Exit Sub и перед оператором End Sub , чтобы отделить его от процесса обработки процедуры. Here, the error-handling code follows the Exit Sub statement and precedes the End Sub statement to separate it from the procedure flow. Код обработки ошибок может помещаться в любом месте процедуры. Error-handling code can be placed anywhere in a procedure.

Неперехваченные ошибки в объектах возвращаются в управляющее приложение, когда объект выполняется как исполняемый файл. 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:

Читайте также:  Media creation tool linux

Системные ошибки во время вызовов ресурсов кода библиотек динамической компоновки (DLL) Windows или Macintosh не вызывают исключений и не могут быть перехвачены при перехвате ошибок Visual Basic. System errors during calls to Windows dynamic-link libraries (DLL) or Macintosh code resources do not raise exceptions and cannot be trapped with Visual Basic error trapping. При вызове функций DLL необходимо проверять каждое возвращаемое значение на успех или неудачу (в соответствии со спецификациями API), а в случае сбоя проверьте значение свойства ластдллеррор объекта Err . When calling DLL functions, you should check each return value for success or failure (according to the API specifications), and in the event of a failure, check the value in the Err object’s LastDLLError property. Свойство LastDLLError всегда возвращает ноль в Macintosh. LastDLLError always returns zero on the Macintosh.

Пример 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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Have questions or feedback about Office VBA or this documentation? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь. Please see Office VBA support and feedback for guidance about the ways you can receive support and provide feedback.

Обработка ошибок в VBA Excel с помощью оператора On Error. Синтаксис выражений с оператором On Error. Пример кода с простым обработчиком ошибок.

Описание оператора On Error

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

Обработчик ошибок позволяет завершить выполнение программы при возникновении ошибки и вывести сообщение пользователю с ее описанием.

Синтаксис выражений с On Error

Включает алгоритм обнаружения ошибок и, в случае возникновения ошибки, передает управление операторам обработчика ошибок с указанной в выражении строки. 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.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *