Типы ошибок в VBA

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

Далее мы поговорим о каждом из трёх типов ошибок VBA подробно.

Ошибки компиляции

Компилятор VBA рассматривает ошибки компиляции как недопустимые и выделяет их в коде ещё до того, как дело дойдёт до запуска макроса.

Если при написании кода допущена синтаксическая ошибка, то редактор VBA сигнализирует об этом немедленно: либо при помощи окна с сообщением, либо выделяя ошибку красным цветом, в зависимости от статуса режима Auto Syntax Check.

Примечание: При включённом режиме Auto Syntax Check каждый раз, при появлении в редакторе Visual Basic во введённом коде синтаксической ошибки, будет показано соответствующее сообщение. Если же этот режим выключен, то редактор VBA продолжит сообщать о синтаксических ошибках, просто выделяя их красным цветом. Опцию Auto Syntax Check можно включить/выключить в меню Tools > Options редактора Visual Basic.

В некоторых случаях ошибка компиляции может быть обнаружена при выполнении компиляции кода, непосредственно перед тем, как макрос будет выполнен. Обычно ошибку компиляции несложно обнаружить и исправить, потому что компилятор VBA даёт информацию о характере и причине ошибки.

Ошибки в Excel VBA

Например, сообщение “Compile error: Variable not defined” при попытке запустить выполнение кода VBA говорит о том, что происходит попытка использовать или обратиться к переменной, которая не была объявлена для текущей области (такая ошибка может возникнуть только если используется Option Explicit).

Ошибки выполнения

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

Примером такой ошибки может служить попытка выполнить деление на ноль. В результате будет показано сообщение “Run-time error ’11’: Division by zero“.

Ошибки в Excel VBA

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

Ошибки в Excel VBA

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

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

Коды различных ошибок выполнения расшифрованы на сайте Microsoft Support (на английском). Наиболее часто встречающиеся ошибки VBA перечислены в этой таблице:

Перехват ошибок выполнения

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

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

В этом коде производится попытка открыть файл Excel с именем Data. Если файл не найден, то пользователю будет предложено поместить этот файл в нужную папку. После того, как пользователь сделает это и нажмёт ОК, выполнение кода продолжится, и попытка открыть этот файл повторится. При желании вместо попытки открыть нужный файл, выполнение процедуры Sub может быть прервано в этом месте при помощи команды Exit Sub.

Логические ошибки

Логические ошибки (или баги) возникают в процессе выполнения кода VBA, но позволяют ему выполняться до самого завершения. Правда в результате могут выполняться не те действия, которые ожидалось, и может быть получен неверный результат. Такие ошибки обнаружить и исправить труднее всего, так как компилятор VBA их не распознаёт и не может указать на них так, как это происходит с ошибками компиляции и выполнения.

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

Редактор Excel VBA предоставляет набор инструментов отладки, которые помогут найти и исправить логические ошибки в коде VBA. В данной статье мы не будем рассматривать подробно эти инструменты. Любознательный пользователь может найти обзор инструментов отладки VBA на сайте Microsoft Help & Support (на английском).

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

Предвидение ошибки в коде делает вас профессионалом в кодировании VBA. Вы не можете сделать код на 100% эффективным, даже если вы так или иначе уверены в своем коде, так как это может вызвать ошибку.

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

Что такое ошибка?

Например, если вы попытаетесь удалить лист, которого нет, очевидно, что мы не сможем выполнить эту строку кода.

Но у нас есть инструкция в VBA для обработки всех этих типов ошибок, например, инструкция «On Error».

Типы сообщений об ошибках

Ключевым моментом обработки ошибок в VBA является оператор «On Error». Например, при ошибке «возобновить следующую строку», «перейти к другой строке или перейти к ней» и т. Д.

Оператор On Error имеет три вида операторов.

3 основных способа обработки ошибок в VBA

Предположим, вы делите значение 20 на 0 и объявили переменную, чтобы присвоить ей результат деления.

Если вы запустите этот код, он выдаст ошибку, указанную ниже.

Теперь добавлю в код еще одну строчку.

Теперь я добавлю следующее вверху утверждение При возобновлении ошибки.

Теперь, если я выполню этот код, он не выдаст мне никаких сообщений об ошибках, а выполнит следующую строку кода, т. е. j = 20/2.

Я объявил три переменные.

Для всех этих трех переменных я назначу расчет деления.

Результат всех этих трех вычислений будет показан в окне сообщения.

Теперь я попытаюсь выполнить этот код, поскольку вычисление «I» некорректно, мы получим ошибку времени выполнения 11.

Теперь я добавлю заявление «При ошибке возобновить следующее».

Если я выполню это, он пропустит вычисление «I» и выполнит оставшиеся два вычисления, и результат будет следующим.

Теперь вместо «При ошибке возобновить следующий» я добавлю «При ошибке GoTo KCalculation»

Note: Here “KCalculation” is the label name I had given, you can give your own label name without any space.

Now if I execute this line of code it will not jump to the next line rather it will jump to the label name I have entered i. e. “KCalcualtion”. Here it will ignore the error given by “I” and also it will not execute “j” calculation but straight away it jumps to “KCalcualtion”.

#3 – Print Error Number in VBA

At the end of the code, we can also print the error number in a separate message box. The following line of code will do this job.

Code:

Now I will run this code first message box will show the calculation results.

Click on OK, it will show one more message box to show the error number.

We go 11 as the result i. e. Division by Zero.

We can also get the error description instead of the number. We just need to change the code, below is the code.

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

AutoMacro

star star star star star

VBA On Error – Error Handling Best Practices

VBA Errors Cheat Sheet

Errors

VBA Error Handling

VBA Error Handling refers to the process of anticipating, detecting, and resolving VBA Runtime Errors. The VBA Error Handling process occurs when writing code, before any errors actually occur.

VBA Runtime Errors are errors that occur during code execution. Examples of runtime errors include:

VBA On Error Statement

Most VBA error handling is done with the On Error Statement. The On Error statement tells VBA what to do if it encounters an error. There are three On Error Statements:

On Error GoTo 0

On Error GoTo 0 is VBA’s default setting. You can restore this default setting by adding the following line of code:

When an error occurs with On Error GoTo 0, VBA will stop executing code and display its standard error message box.

vba runtime error 13

Often you will add an On Error GoTo 0 after adding On Error Resume Next error handling (next section):

On Error Resume Next

On Error Resume Next tells VBA to skip any lines of code containing errors and proceed to the next line.

Note: On Error Resume Next does not fix an error, or otherwise resolve it. It simply tells VBA to proceed as if the line of code containing the error did not exist. Improper use of On Error Resume Next can result in unintended consequences.

A great time to use On Error Resume Next is when working with objects that may or may not exist. For example, you want to write some code that will delete a shape, but if you run the code when the shape is already deleted, VBA will throw an error. Instead you can use On Error Resume Next to tell VBA to delete the shape if it exists.

Notice we added On Error GoTo 0 after the line of code containing the potential error. This resets the error handling.

In the next section we’ll show you how to test if an error occurred using Err. Number, giving you more advanced error handling options..

Err. Number, Err. Clear, and Catching Errors

Instead of simply skipping over a line containing an error, we can catch the error by using On Error Resume Next and Err. Number.

Err. Number returns an error number corresponding with the type of error detected. If there is no error, Err. Number = 0.

For example, this procedure will return “11” because the error that occurs is Run-time error ’11’.

vba run-time error 11 err. number

Error Handling with Err. Number

The true power of Err. Number lies in the ability to detect if an error occurred (Err. Number <> 0). In the example below, we’ve created a function that will test if a sheet exists by using Err. Number.

With On Error Resume Next and Err. Number, you can replicate the “Try” & “Catch” functionality of other programming languages.

On Error GoTo Line

On Error GoTo Line tells VBA to “go to” a labeled line of code when an error is encountered. You declare the Go To statement like this (where errHandler is the line label to go to):

and create a line label like this:

Note: This is the same label that you’d use with a regular VBA GoTo Statement.

Below we will demonstrate using On Error GoTo Line to Exit a procedure.

On Error Exit Sub

You can do this by placing the error handler line label at the end of your procedure:

After an error is handled, you should generally clear the error to prevent future issues with error handling.

VBA On Error MsgBox

You might also want to display a Message Box on error. This example will display different message boxes depending on where the error occurs:

Here you would replace Err. Raise(11) with your actual code.

VBA IsError

Another way to handle errors is to test for them with the VBA IsError Function. The IsError function tests an expression for errors, returning TRUE or FALSE if an error occurs.

If Error VBA

You can also handle errors in VBA with the Excel IfError Function. The IfError Function must be accessed by using the WorksheetFunction Class:

This will output the value of Range A10, if the value is an error, it will output 0 instead.

VBA Error Types

Runtime Errors

VBA Runtime Errors are errors that occur during code execution. Examples of runtime errors include:

vba runtime error 13

You can “error handle” runtime errors using the methods discussed above.

Syntax Errors

VBA Syntax Errors are errors with code writing. Examples of syntax errors include:

The VBA Editor identifies many syntax errors with red highlighting:

vba syntax error example

The VBA Editor also has an option to “Auto Syntax Check”:

vba syntax error option

When this is checked, the VBA Editor will generate a message box alerting you syntax errors after you enter a line of code:

vba syntax compile error

I personally find this extremely annoying and disable the feature.

Compile Errors

Before attempting to run a procedure, VBA will “compile” the procedure. Compiling transforms the program from source code (that you can see) into executable form (you can’t see).

VBA Compile Errors are errors that prevent the code from compiling.

A good example of a compile error is a missing variable declaration:

vba compile error variable

Other examples include:

Syntax Errors (previous section) are a subset of Compile Errors.

Debug > Compile

Compile errors will appear when you attempt to run a Procedure. But ideally, you would identify compile errors prior to attempting to run the procedure.

You can do this by compiling the project ahead of time. To do so, go to Debug > Compile VBA Project.

vba debug compile

The compiler will “go to” the first error. Once you fix that error, compile the project again. Repeat until all errors are fixed.

You can tell that all errors are fixed because Compile VBA Project will be grayed out:

vba compile vbaproject

OverFlow Error

vba overflow error

Instead, you should use the Long Variable to store the larger number.

Other VBA Error Terms

VBA Catch Error

Unlike other programming languages, In VBA there is no Catch Statement. However, you can replicate a Catch Statement by using On Error Resume Next and If Err. Number <> 0 Then. This is covered above in Error Handling with Err. Number.

VBA Ignore Error

To ignore errors in VBA, simply use the On Error Resume Next statement:

Источники:

https://office-guru. ru/excel/tipy-oshibok-v-vba-467.html

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

https://www. automateexcel. com/vba/error-handling/

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

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