какой объект содержит информацию об ошибке vba

Управление ошибками в VBA. Операторы On Error, Resume, объект Err

Информация из интернета:

Ошибки в VBA можно разделить:

Возбуждение ошибки может быть сделано самой операционной системой (VBA) или исполняемой процедурой(почти все они классифицированы и каждая из них однозначно идентифицируется своим номером).

При возбуждении ошибки (внутренней или пользовательской), в момент возбуждения ошибки заполняются свойства объекта Err,
так что он содержит всю информацию о последней возникшей ошибке.

Синтаксически охраняемый блок окружен специальными операторами On Error.

Обработчик ошибок, как правило, завершается специальным оператором Resume, который задает точку в процедуре, которой передается управление после завершения обработки ошибки.

Схема процедуры с тремя охраняемыми блоками (разные варианты обработки ошибок):

Варианты комбинаций операторов On Error и Resume:


On Error GoTo строка;
On Error Resume Next;
On Error GoTo 0;
On Error Resume (или On Error Resume (0) )

On Error GoTo строка — управление покидает охраняемый блок и передается на указанную строку, запуская, тем самым, обработчик ошибок, начинающийся в этой строке.

Объект Err содержит информацию о последней ошибке выполнения.
Объект Err создается системой вместе с проектом.
Очистка объекта Err может производиться принудительно (использование метода Clear): Err.Clear

Автоматическая очистка свойств объекта Err происходит также при выполнении операторов:

оператора Resume любого вида;
Exit Sub, Exit Function, Exit Property ;
оператора On Error любого вида.

Источник

Объект Err

Примечания

Свойства объекта Err устанавливаются генератором ошибки Visual Basic, объекта или программиста.

Свойство по умолчанию объекта ErrНомер. Так как свойство по умолчанию может быть представлено именем объекта Err, более ранний код, написанный с помощью функции Err или Err, не должен изменяться.

Когда возникает ошибка периода выполнения, свойства объекта Err заполняются информацией, которая однозначно идентифицирует ошибку, а также сведениями, которые могут использоваться для обработки ошибки. Чтобы создать ошибку во время работы в коде, используйте метод Raise.

Свойства объекта Err сброшены до нуля или нулевой длины строк («») после выхода Sub, Exit Function, Exit Property или Resume Next в режиме обработки ошибок. При использовании оператора Resume любого вида вне программы обработки ошибок не приводит к сбросу свойств объекта Err в исходные значения. Метод Clear можно использовать для явного сброса Err.

Используйте метод Raise, а не заявление об ошибке, чтобы создавать ошибки во времени работы для системных ошибок и классов. Использование метода Raise в другом коде зависит от насыщенности возвращаемой информации.

Объект Err является внутренним объектом с глобальной областью видимости. Нет необходимости создавать его экземпляр в программном коде.

Пример

В этом примере используются свойства объекта Err (Номер, Описание, HelpContext, HelpFile, Source) при построении диалогового окна с сообщением об ошибке.

Обратите внимание, что если метод Clear используется первым при генерировании ошибки Visual Basic с помощью метода Raise, значения по умолчанию в Visual Basic становятся свойствами объекта Err.

См. также

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Оператор On Error (Visual Basic)

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

Error Ключевое слово также используется в инструкции Error, которая поддерживается для обеспечения обратной совместимости.

Синтаксис

Компоненты

Комментарии

Рекомендуется использовать структурированную обработку исключений в коде, когда это возможно, а не использовать неструктурированную обработку исключений и On Error инструкцию. Дополнительные сведения см. в разделе Оператор Try. Catch. Finally.

Обработчик ошибок с включенным параметром — это тот, который включен On Error оператором. «Активный» обработчик ошибок — это включенный обработчик, который находится в процессе обработки ошибки.

Если ошибка возникает при активном обработчике ошибок (между возникновением ошибки и Resume Exit Sub Exit Function оператором,, или Exit Property ), обработчик ошибок текущей процедуры не может справиться с ошибкой. Управление возвращается вызывающей процедуре.

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

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

Читайте также:  ble геркон старлайн s96 что это такое

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

Number, свойство

Оператор Throw

Ошибка, возникающая при использовании Err.Raise метода, задает Exception для свойства только что созданный экземпляр Exception класса. Для поддержки вызова исключений производных типов исключений в Throw языке поддерживается инструкция. Это принимает единственный параметр, который является экземпляром исключения, который будет выдаваться. В следующем примере показано, как можно использовать эти функции с существующей поддержкой обработки исключений.

Обратите внимание, что On Error GoTo оператор захватывает все ошибки независимо от класса исключений.

При возникновении ошибки далее

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

On Error GoTo 0

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

On Error GoTo-1

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

Здесь код обработки ошибок следует за Exit Sub оператором и предшествует End Sub оператору, чтобы отделить ее от потока процедур. Код обработки ошибок можно разместить в любом месте процедуры.

Неперехваченные ошибки

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

При создании объекта, обращающегося к другим объектам, следует попытаться обрабатывать любые необработанные ошибки, которые они передают. Если вы не можете, сопоставьте коды ошибок Err.Number с одной из собственных ошибок, а затем передавайте их обратно вызывающему объекту. Необходимо указать ошибку, добавив код ошибки в VbObjectError константу. Например, если код ошибки — 1052, назначьте его следующим образом:

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

Пример

В этом примере сначала используется On Error GoTo оператор, чтобы указать расположение подпрограммы обработки ошибок в процедуре. В этом примере попытка деления на ноль приводит к возникновению ошибки с номером 6. Ошибка обрабатывается в подпрограммы обработки ошибок, а затем Управление возвращается инструкции, вызвавшей ошибку. On Error GoTo 0 Инструкция отключает перехват ошибок. Затем On Error Resume Next оператор используется для задержки перехвата ошибок таким образом, чтобы контекст для ошибки, создаваемой следующей инструкцией, мог быть известен для определенных. Обратите внимание, что Err.Clear используется для очистки Err свойств объекта после обработки ошибки.

Требования

Пространство имен: Microsoft. VisualBasic

Источник

Оператор On Error

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

Синтаксис

On Error GoTo line
On Error Resume Next
On Error GoTo 0

Синтаксис оператора On Error может принимать любую из следующих форм:

Statement Описание
On Error GoTo line Включает процедуру обработки ошибок, которая начинается в строке, указанной в аргументе обязательной строки.

Аргумент line представляет собой любую метку строки или любой номер строки.

Если возникает ошибка во время запуска, ветвям управления необходимо выполнить строку, что делает обработник ошибок активным.

Указанная строка должна быть в той же процедуре, что и оператор On Error; в противном случае происходит ошибка во время компиляции.

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

Примечания

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

«Включенный» обработчик ошибок — это обработчик, включенный оператором On Error; «активный» обработчик — это включенный обработчик, который находится в процессе обработки ошибки. Если ошибка возникает при активном обработнике ошибок (между возникновением ошибки и возобновлением, выходом sub, exit function или exit Property statement), обработник ошибки текущей процедуры не может справиться с ошибкой. Управление возвращается к вызывающей процедуре.

Если вызывающая процедура содержит включенный обработчик ошибок, он активируется для обработки ошибки. Если обработчик ошибок вызывающей процедуры также активный, управление передается обратно через предыдущие вызывающие процедуры до тех пор, пока не будет найден включенный, но неактивный обработчик. Если не удается найти неактивный включенный обработчик ошибок, ошибка является неустранимой в той точке, в которой она фактически произошла.

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

Процедура обработки ошибок не является процедурой Sub или Функцией. Это фрагмент кода, отмеченный меткой строки или номером строки.

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

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

Если создается объект, имеющий доступ к другим объектам, следует попытаться обработать ошибки, передаваемые из этих объектов необработанными. Если вам не удается обрабатывать такие ошибки, сопоставьте код ошибки в Err.Number с одной из собственных ошибок и затем передайте их обратно вызывающей стороне объекта. Следует указать ошибку, добавив код ошибки в константу vbObjectError. Например, если код вашей ошибки — 1052, назначьте его следующим образом:

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

Пример

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

Затем заявление On Error Resume Next используется для отсрочки улавливания ошибок, чтобы можно было точно знать контекст ошибки, порожденной следующим утверждением. Обратите внимание, что Err.Clear используется для очистки свойств объекта Err после обработки ошибки.

См. также

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Определенная приложением или объектом ошибка

Это сообщение появляется, когда ошибка, созданная с помощью метода Raise или инструкции Error, не соответствует ошибке, определенной Visual Basic для приложений. Оно вызывается также функцией Error для аргументов, не соответствующих ошибкам, определенным Visual Basic для приложений. Таким образом, это может быть ошибка, определенная вами или объектом, включая ведущие приложения, такие как Microsoft Excel, Visual Basic и т. д. Например, формы Visual Basic создают связанные с формами ошибки, которые нельзя создать из программы, просто указав номер в качестве аргумента метода Raise или функции Error. Это сообщение имеет следующие причины и решения:

Приложение выполнило оператор Err.Raisen или Errorn, но номер n не определен программой Visual Basic для приложений. Если это то, что требовалось, используйте Err.Raise и задайте дополнительные аргументы, чтобы конечному пользователю была понятна суть ошибки. Например, можно добавить строку описания, источник и справочную информацию. Чтобы повторно создать ошибку, которую вы перехватили, не следует выполнять перед этим Err.Clear. Если вначале выполнялась Err.Clear, нужно добавить дополнительные аргументы для метода Raise. Убедитесь, что воссоздаете ту же ошибку, просмотрев ее контекст;

при доступе к объектам из других приложений на вашу программу могла распространиться ошибка, которую нельзя сопоставить с ошибкой Visual Basic.

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

Перечисление перехватываемых ошибок для ведущего приложения

Ранее программисты, как правило, использовали цикл для вывода всех строк с сообщениями об ошибках, которые можно перехватить. Обычно это описывалось в таком коде:

Такой код по-прежнему перечисляет все сообщения об ошибках Visual Basic для приложений, но отображает сообщение «Application-defined or object-defined error» («Ошибка, определенная приложением или объектом») для ошибок, определенных ведущими приложениями (например для тех, которые в Visual Basic относятся к формам и элементам управления). Многие из этих ошибок являются перехватываемыми ошибками выполнения. С помощью диалогового окна поиска в разделе справки вы сможете найти список перехватываемых ошибок вашего ведущего приложения. Щелкните Search (Поиск), введите trappable (перехватываемые) в первом поле ввода и нажмите Show Topics (Показать темы). Выберите Trappable Errors (Перехватываемые ошибки) в нижнем окне списка и нажмите Go To (Перейти).

Для получения дополнительной информации выберите необходимый элемент и нажмите клавишу F1 (для Windows) или HELP (для Macintosh).

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

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.

Источник

Читайте также:  что делать если голова постоянно грязная
Сказочный портал