26

On Error в VBA

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

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

Итак, оператор On Error имеет четыре настройки:

1. On Error GoTo 0

2. On Error Resume Next

3. On Error GoTo [Метка]

4. On Error GoTo -1


On Error GoTo 0

Настройка On Error GoTo 0 является настройкой по умолчанию. При ней выполнение кода останавливается на строке с ошибкой и выводится сообщение:

On Error в VBA Microsoft Excel, Vba, Видео, Длиннопост

Продолжение работы кода возможно лишь после вмешательства в него. Поэтому, в выведенном сообщении мы может либо оставить выполнение кода нажатием на кнопку «End», либо приступить к его поправке, нажав на «Debug».

On Error Resume Next

При настройке Resume Next VBA, не смотря на ошибку, продолжает выполнение кода, не выводя при этом сообщений об ошибке. Ошибочные строки кода просто игнорируются, и программа их «перепрыгивает».

Для переключения режима работы VBA на настройку Resume Next нужно прописать указание «On Error Resume Next» с той строки, с которой эта настройка требуется:

On Error в VBA Microsoft Excel, Vba, Видео, Длиннопост

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

On Error в VBA Microsoft Excel, Vba, Видео, Длиннопост

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


On Error GoTo [Метка]

Данная настройка заставляет VBA производить прыжок к определенному месту в коде, которое помечается с помощью метки. Метка при этом указывается с помощью двоеточия:

On Error в VBA Microsoft Excel, Vba, Видео, Длиннопост

Важно при этом помнить, что после первого «прыжка» к указанной метке настройка On Error возвращается в исходное положение – то есть GoTo 0. Следовательно, если в части кода после метки также возникнет ошибка, будет выведено сообщение об ошибке и VBA попросит либо поправить код, либо остановить выполнение кода.

On Error в VBA Microsoft Excel, Vba, Видео, Длиннопост

On Error GoTo -1

С помощью последней настройки GoTo -1 мы можем встраивать несколько меток в код. Для этого сразу после первой метки надо прописать On Error GoTo -1, а затем вписать вторую настройку с меткой.

On Error в VBA Microsoft Excel, Vba, Видео, Длиннопост

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

MS, Libreoffice & Google docs

759 постов15K подписчика

Правила сообщества

1. Не нарушать правила Пикабу

2. Публиковать посты соответствующие тематике сообщества

3. Проявлять уважение к пользователям

4. Не допускается публикация постов с вопросами, ответы на которые легко найти с помощью любого поискового сайта.

По интересующим вопросам можно обратиться к автору поста схожей тематики, либо к пользователям в комментариях


Важно - сообщество призвано помочь, а не постебаться над постами авторов! Помните, не все обладают 100 процентными знаниями и навыками работы с Office. Хотя вы и можете написать, что вы знали об описываемом приёме раньше, пост неинтересный и т.п. и т.д., просьба воздержаться от подобных комментариев, вместо этого предложите способ лучше, либо дополните его своей полезной информацией и вам будут благодарны пользователи.

Утверждения вроде "пост - отстой", это оскорбление автора и будет наказываться баном.