Ошибки времени выполнения VBA — это ошибки , возникающие во время выполнения кода. Примеры ошибок во время выполнения включают:
- Ссылка на несуществующую книгу, рабочий лист или другой объект
- Недопустимые данные, например, ссылка на ячейку Excel, содержащую ошибку
- Попытка деления на ноль
Вы можете “обрабатывать ошибки” во время выполнения, используя методы, описанные в первой части урока .
☑️ Синтаксические ошибки
Синтаксические ошибки VBA — это ошибки при написании кода. Примеры синтаксических ошибок включают:
- Неправильный ввод
- Пропущенная или неправильная пунктуация
Редактор VBA выделяет многие синтаксические ошибки красным цветом:
В редакторе VBA также есть опция “Автоматической проверки синтаксиса”:
Если этот флажок установлен, редактор VBA сгенерирует окно сообщения с предупреждением о синтаксических ошибках после ввода строки кода:
Синтаксические ошибки являются подмножеством ошибок компиляции .
Урок 7. Подсчеты, обработка ошибок Err. Excel+VBA. Система учета Интернет-магазина
☑️ Ошибки компиляции
Прежде чем пытаться запустить процедуру, VBA “скомпилирует” процедуру .
Компиляция преобразует программу из исходного кода (который вы можете видеть) в исполняемую форму (которую вы не видите).
Ошибки компиляции VBA — это ошибки , которые препятствуют компиляции кода.
Хорошим примером ошибки компиляции является пропущенное объявление переменной
Другие примеры включают:
- For without Next
- Select without End Select
- If without End If
- Calling a procedure that does not exist
⏩ Отладка> Компиляция
Ошибки компиляции будут появляться при попытке запустить процедуру. Но в идеале вы должны выявлять ошибки компиляции до попытки запуска процедуры.
Вы можете сделать это, скомпилировав проект заранее. Для этого перейдите в раздел » Отладка»> «Скомпилировать проект VBA «.
Компилятор “перейдет” к первой ошибке.
Как только вы исправите эту ошибку, скомпилируйте проект снова.
⚠️ Повторяйте, пока все ошибки не будут исправлены.
Вы можете сказать, что все ошибки исправлены, потому что скомпилированный проект VBA будет выделен серым цветом:
☑️ Ошибка переполнения
Ошибка переполнения VBA возникает при попытке ввести значение в слишком большую переменную.
Например, целочисленные переменные могут содержать только значения от -32 768 до 32 768.
Если вы введете большее значение, вы получите сообщение об ошибке переполнения:
Вместо этого вы должны использовать длинную переменную для хранения большего числа.
☑️ Ошибка перехвата VBA
В отличие от других языков программирования, в VBA нет оператора Catch . Однако вы можете воспроизвести оператор Catch, используя On Error Resume Next и If Err.Number <> 0 Then . Это описано выше в разделе Обработка ошибок с помощью Err.Number .
☑️ Как игнорировать ошибку
Чтобы игнорировать ошибки в VBA, просто используйте следующий оператор On Error Resume :
On Error Resume vs. GoTo и работа с ошибками (Серия VBA 36)
On Error Resume Next
⚠️ ВНИМАНИЕ! Как упоминалось ранее, вы должны быть осторожны с использованием этого оператора, поскольку он не исправляет ошибку, он просто игнорирует строку кода, содержащую ошибку.
☑️ VBA выдает ошибку / Err.Raise
Для устранения ошибки в VBA используется метод Err.Raise .
Эта строка кода вызовет ошибку времени выполнения ’13’: несоответствие типов:
Err.Raise (13)
Источник: dzen.ru
Типы ошибок в VBA
При выполнении макросов Excel могут возникнуть ошибки, которые в VBA делят на три категории:
- Ошибки компиляции
- Ошибки выполнения
- Логические ошибки (баги)
Далее мы поговорим о каждом из трёх типов ошибок VBA подробно.
Ошибки компиляции
Компилятор VBA рассматривает ошибки компиляции как недопустимые и выделяет их в коде ещё до того, как дело дойдёт до запуска макроса.
Если при написании кода допущена синтаксическая ошибка, то редактор VBA сигнализирует об этом немедленно: либо при помощи окна с сообщением, либо выделяя ошибку красным цветом, в зависимости от статуса режима Auto Syntax Check.
Примечание: При включённом режиме Auto Syntax Check каждый раз, при появлении в редакторе Visual Basic во введённом коде синтаксической ошибки, будет показано соответствующее сообщение. Если же этот режим выключен, то редактор VBA продолжит сообщать о синтаксических ошибках, просто выделяя их красным цветом. Опцию Auto Syntax Check можно включить/выключить в меню Tools > Options редактора Visual Basic.
В некоторых случаях ошибка компиляции может быть обнаружена при выполнении компиляции кода, непосредственно перед тем, как макрос будет выполнен. Обычно ошибку компиляции несложно обнаружить и исправить, потому что компилятор VBA даёт информацию о характере и причине ошибки.
Например, сообщение «Compile error: Variable not defined» при попытке запустить выполнение кода VBA говорит о том, что происходит попытка использовать или обратиться к переменной, которая не была объявлена для текущей области (такая ошибка может возникнуть только если используется Option Explicit).
Ошибки выполнения
Ошибки выполнения возникают в процессе выполнения кода и приводят к остановке выполнения программы. Этот тип ошибок VBA, как правило, также не сложно обнаружить и исправить, так как сообщается информация о характере ошибки и место в коде, где произошла остановка.
Примером такой ошибки может служить попытка выполнить деление на ноль. В результате будет показано сообщение «Run-time error ’11’: Division by zero«.
В зависимости от структуры проекта VBA, может быть предложено выполнить отладку кода (как показано на рисунке ниже). В этом случае при нажатии на кнопку Debug (в окне сообщения о необходимости отладки) будет выделена цветом строка кода, которая стала причиной ошибки 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 https://office-guru.ru/excel/tipy-oshibok-v-vba-467.html» target=»_blank»]office-guru.ru[/mask_link]