Обработка ошибок VBA

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

Различные типы ошибок в VBA

  1. Синтаксическая ошибка или ошибка синтаксического анализа
  2. Ошибка компиляции или компиляции
  3. Ошибка выполнения
  4. Логическая ошибка

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

При ошибке возобновить следующее

При ошибке Перейти к 0

При ошибке Перейти к

При ошибке Перейти -1

Обработка ошибок VBA с помощью различных операторов 'ON ERROR'

Пример № 1 — ошибки компиляции VBA

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

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

«ОШИБКА КОМПИЛЯЦИИ: ПЕРЕМЕННАЯ НЕ ОПРЕДЕЛЕНА» — это самая распространенная ошибка, которая появляется во всплывающем сообщении. когда ссылочная переменная не определена, возникает эта ошибка.

В приведенном выше примере я не объявил тип переменной как String, поэтому возникает эта ошибка. Итак, мне нужно объявить переменную как Dim A As String.

Пример №2 — Ошибка выполнения VBA

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

Пример № 3 — Логические ошибки или ошибки VBA

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

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

Как предотвратить ошибки в VBA?

Давайте посмотрим, как предотвратить различные типы ошибок в VBA Excel.

Шаг 1: Чтобы открыть окно редактора VB Выберите или щелкните Visual Basic в группе « Код » на вкладке « Разработчик », или вы можете напрямую нажать сочетание клавиш Alt + F11 .

Шаг 2. Чтобы создать пустой модуль, в объектах Microsoft Excel щелкните правой кнопкой мыши лист 1 (VB_ERROR HANDLING) и вставьте модуль, чтобы создать новый пустой модуль.

Обработка ошибок VBA с опцией отладки

Лучше скомпилировать код, прежде чем мы его запустим. Чтобы выполнить компиляцию, необходимо выполнить следующие шаги. На панели инструментов меню VB под опцией Debug нам нужно выбрать компилируемый проект VBA. Когда вы нажимаете на него, он проверяет код шаг за шагом, как только он находит ошибку, он выделяет ее и появляется всплывающее сообщение, поэтому вам необходимо исправить его. как только это исправлено, вам нужно скомпилировать, чтобы найти следующую ошибку в коде.

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

Обработка ошибок VBA с помощью различных операторов 'ON ERROR'

1. При ошибке возобновить следующее

Здесь ошибка будет игнорироваться, и код будет двигаться дальше.

В приведенном ниже примере значение 6 не может быть разделено на ноль, если вы запустите его, не введя оператор On Error Resume Next, то произойдет ошибка, упомянутая ниже.

Если On Error Resume Next вводится вверху кода после оператора Sub, он игнорирует ошибку времени выполнения и переходит к следующему оператору, что приводит к выводу 6/2, то есть 3 (всплывающее окно сообщения с результатом этого).

2. При ошибке GoTo 0 и Error GoTo -1

«On Error GoTo 0» остановит код в конкретной строке, которая вызывает ошибку, и отобразит окно сообщения, которое описывает или указывает на ошибку.

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

Обычно вы можете наблюдать окно сообщения об ошибке во время выполнения, содержащее опции «Продолжить», «Конец», «Отладка» и «Справка» . давайте проверим использование каждого из них.

  • Опция Continue проигнорирует исключение и продолжит код, если это возможно.
  • Опция end завершает программу.
  • Опция отладки подсвечивает оператор, в котором произошла ошибка. который помогает вам отладить или исправить код.
  • Параметр Справка откроет страницу справки Microsoft MSDN.

On Error GoTo 0 с On Error Resume Next

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

On Error GoTo 0 отключает любое отслеживание ошибок, присутствующее в настоящее время в коде VBA, т. Е. Отключает обработку ошибок в основном коде, тогда как On Error GoTo -1 очищает обработку ошибок и ничего не устанавливает, что помогает или позволяет создать еще одну ловушку ошибок.

3. При ошибке GoTo <LABEL

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

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

В приведенном ниже коде VBA, как только ошибка возникает в строке 3, программа передает управление в строку 6, т. Е. Метку (всплывающее сообщение отображается как «Обработчик исключения» ).

Здесь вы можете заметить, что «Exit Sub» следует использовать непосредственно перед меткой «Error_handler:», это делается для того, чтобы блок кода обработчика ошибок останавливался или не выполнялся, если нет ошибки. Теперь вы можете сохранить свою книгу как «книгу с поддержкой макросов Excel». Кликните на сохранить как в левом углу листа.

Еще раз, если вы откроете файл, вы можете нажать на клавишу быстрого доступа, например, Fn + Alt + f8, появится диалоговое окно «Макрос», где вы можете запустить сохраненный код макроса по вашему выбору или вы можете нажать Fn + Alt + F11 для полное окно макроса.

То, что нужно запомнить

  • Прежде чем писать код, вы должны убедиться, что разрыв необработанных ошибок проверен или выбран по ошибке. опция захвата под общим в настройках инструмента панели инструментов VBA.
  • Это настройка по умолчанию, которая помогает остановить ваш код для ошибок, которые не обрабатываются.
  • Разбить все ошибки: он остановит ваш код на всех типах ошибок.
  • Модуль класса взлома: в случае использования в коде такого объекта, как пользовательская форма, будет выделена точная строка, вызывающая ошибку.

Рекомендуемые статьи

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

Типы ошибок в 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 (на английском).

Источники:

https://ru. photo-555.com/8318574-vba-error-handling

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

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

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