VBA при ошибке Goto 0 | Как использовать при ошибке GoTo 0 в Excel VBA?

Excel VBA при ошибке Перейти к 0

VBA On Error GoTo 0 - это оператор обработчика ошибок, используемый для отключения включенного обработчика ошибок в процедуре. Это называется «Отключение обработчика ошибок».

Обработка ошибок на любом из языков программирования - это мастер-класс, который должны понимать все программисты. Язык программирования VBA тоже, и у нас также есть методы обработки ошибок на этом языке программирования. «On Error Resume Next» включает обработчик ошибок, а «On Error GoTo 0» отключает включенный обработчик ошибок.

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

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

Как использовать инструкцию On Error GoTo 0?

Вы можете скачать этот шаблон Excel VBA On Error Goto 0 здесь - Шаблон VBA On Error Goto 0 Excel

Для примера посмотрите приведенный ниже код.

Код:

 Sub On_ErrorExample1 () Worksheets ("Sheet1"). Выберите диапазон ("A1"). Value = 100 Worksheets ("Sheet2"). Select Range ("A1"). Value = 100 End Sub 

Приведенный выше код сначала выбирает лист с именем «Sheet1», а в ячейку A1 вставляет значение 100.

Код:

Листы ("Лист1"). Выберите диапазон ("A1"). Значение = 100

Затем он выберет лист с именем «Sheet2» и вставит то же значение.

Код:

Листы ("Лист2"). Выберите диапазон ("А1"). Значение = 100

Теперь у меня в книге есть листы ниже.

Нет листов с именами «Sheet1» и «Sheet2», когда мы запускаем код, он обнаруживает ошибку, подобную приведенной ниже.

Поскольку нет листа с именем «Лист1», возникла ошибка «Нижний индекс вне допустимого диапазона». Чтобы обработать эту ошибку, я добавлю оператор обработчика ошибок «On Error Resume Next» в верхней части макроса.

Код:

 Sub On_ErrorExample1 () При ошибке Возобновить следующие рабочие листы ("Sheet1"). Выберите диапазон ("A1"). Значение = 100 рабочих листов ("Sheet2"). Выберите диапазон ("A1"). Значение = 100 End Sub 

Теперь запустите код и посмотрите, что произойдет.

Он не будет выдавать никаких сообщений об ошибках, потому что включен оператор обработчика ошибок On Error Resume Next .

Представьте себе сценарий, в котором нам нужно игнорировать ошибку в случае недоступности рабочего листа «Лист1», но нам нужно уведомить, если нет рабочего листа с именем «Лист2».

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

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

Код:

 Sub On_ErrorExample1 () При ошибке Возобновить следующие рабочие листы ("Sheet1"). Выберите диапазон ("A1"). Значение = 100 При ошибке Перейти к 0 рабочим листам ("Sheet2"). Выберите диапазон ("A1"). Значение = 100 End Sub 

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

Теперь, если вы нажмете клавишу F8, выполнение кода перейдет к следующей строке, и задача активной строки будет выполнена. Теперь активная строка (линия желтого цвета) - это обработчик ошибок «После ошибки возобновить следующий», и обработчик ошибок будет включен.

Теперь любая возникающая ошибка будет игнорироваться до тех пор, пока обработчик ошибок не отключит код оператора On Error GoTo 0 .

В предыдущей попытке мы столкнулись с ошибками, но нажмите клавишу F8 еще раз и увидите волшебство.

Не выдавая никаких ошибок, он возобновил выполнение кода, даже если нет рабочего листа «Sheet2» для выбора. Теперь снова нажмите F8.

Поскольку не было Sheet1, он не может вставить значение в ячейку A1 как 500, но что он делает, так это вставляет значение 500 в ячейку A1 независимо от того, какой рабочий лист активен. Когда я выполняю код, моим активным листом был «Sheet3», поэтому в ячейку A1 вставляется значение 100.

Теперь активная строка кода - « On Error GoTo 0 », при нажатии клавиши F8 эта строчная задача будет выполнена.

Since “On Error GoTo 0” is executed it has stopped the process of error handling and again starts to show errors if any occurs. Press the F8 key and see the error.

In the previous case without On Error GoTo 0, it has ignored this error as well, but since we have added error handler disabler it has started to show the error again.

Things to Remember here

  • Both On Error Resume Next and On Error GoTo 0 needs to be used as “Error Handler Enabler” and “Error Handler Disabler”.
  • Any line of codes between these two statements encounters an error it will be ignored.
  • If there is On Error GoTo 0 statement then after the exit of the subprocedure error handler will be disabled.