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

Настраиваем свой редактор кода VBE

Можете сразу выставить такие настройки, ниже описывается подробно каждая опция. Основное внимание обращаем на первые 2 параметра, остальное можно оставить по умолчанию.

Вкладка Editor

Параметр Auto Syntax Check

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

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

Параметр Auto Syntax Check

Параметр Require Variable Declaration

Я сторонник обязательного декларирования переменных и указания их типов. Во включенном состоянии редактор кода будет включать оператор Option Explicit в создаваемые модули/классы и формы. Это означает, что перед тем как использовать переменную вам потребуется ее явно объявить.

Если явно не объявлять переменные, то они имеют тип Variant (используют больше памяти и работают несколько дольше). В целом явное декларирование переменных — хорошая привычка, которую стоит выработать. Это помогает избежать многих проблем при написании кода и его сопровождения.

Параметр Auto List Members

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

Проверить его в действие можно введя, например, текст "Application."

Auto List Members

Вы сможете стрелками вверх вниз выбирать нужный объект и клавишей Tab вставлять в код без ошибок.

Параметр Auto Quick Info

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

Параметр Auto Quick Info

Параметр Auto Data Tips

Включайте этот параметр он будет отображать значения свойств и методов при наведении на них в режиме отладки кода. Вот так:

Параметр Auto Data Tips

Параметр Auto Indent

Параметр отвечает за автоматический отступ текста. Во включенном состоянии при переходе на новую строку будет использоваться тот же отступ, что и для предыдущей строки. Да, конечно не Visual Studio с автоматическим отступом в зависимости от вложенности, но тоже какой никакой плюс.

Да, отступы естественно работают только в том случае если вы используете Tab, а не пробелы. Значение Tab width — ширина одного отступа. Если работаете над кодом совместно, то выставите одинаковое значение на всех компьютерах, чтобы код был единообразным.

Параметр Drag-and-Drop Text Editing

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

Параметр Default to Full Module View

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

Параметр Procrdure Separator

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

Параметр Procrdure Separator

Вкладка General

На данной вкладке стоит обратить внимание на параметр Error Trapping, остальные настройки можно оставить по умолчанию.

Вкладка General

Параметр Error Trapping

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

Долгое время не знал о существовании этой опции и старался избегать классов, так как отслеживать в них ошибки было настоящей проблемой. VBE не останавливался на конкретной строке кода в классе, а отображал ошибки только в модулях программы.

Если установить опцию Break in Class Module то в случае возникновения ошибки в классе, редактор остановится на этой строке кода и вы сможете быстрой найти причину ошибки.

Form Grid Settings

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

Прочие настройки

Show ToolTips — отображает подсказки меню редактора кода при наведении на них мышью. Отключать нет смысла.

Collapse Proj. Hides Windows — Скрывает окна проекта при сворачивании. Тоже оставляйте включенной.

Edit and Continue — уведомляет в случае если переменные теряют установленные значения. Особой полезности в этой функции не заметил, смысла включать нет.

Compile — Советую оставить включенной. Автоматическая компиляция кода происходит практически мгновенно. Проверено на проектах с несколькими десятками тысяч строк кода.

Другие вкладки

Про вкладку Editor Format поговорим в отдельной статье, когда будем разбирать создание своей темы редактора.

Вкладка Docking особого интереса не представляет так как отвечает за прикрепление панелей. Там лучше все оставлять по умолчанию.

Источники:

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

https://micro-solution. ru/excel/vba/vbe-settings

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

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