VBA при ошибке возобновить следующий или перейти к 0

В этом руководстве объясняются инструкции VBA On Error Resume Next и Goto.

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

При ошибке Возобновить Далее

Оператор On Error Resume Next сообщает VBA пропустить любые строки кода, содержащие ошибки, и перейти к следующей строке. VBA проигнорирует строку или строки с ошибкой и перейдет к следующей строке кода.

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

Например, в приведенной ниже процедуре:

123456 Sub HideAllSheets ()Dim ws как рабочий листДля каждой страницы в ActiveWorkbook.Sheetsws.Visible = ЛожьСледующий wsКонец подписки

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

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

1234567 Sub HideAllSheets ()При ошибке Возобновить ДалееDim ws как рабочий листДля каждой страницы в ActiveWorkbook.Sheetsws.Visible = ЛожьСледующий wsКонец подписки

При ошибке GoTo 0

Если в нашем коде нет обработчика ошибок, При ошибке Перейти к 0 является настройкой Excel по умолчанию. Это в основном означает, что когда возникает ошибка с При ошибке GoTo 0, VBA прекратит выполнение кода и отобразит стандартное окно сообщения об ошибке, например:

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

12345678910 Sub ErrorGoTo0 ()При ошибке Возобновить ДалееDim ws как рабочий листДля каждой страницы в ActiveWorkbook.Sheetsws.Visible = ЛожьСледующий wsПри ошибке GoTo 0Например, запустите здесь еще код:ActiveSheet.Name = "Sheet1"Конец подписки

Теперь, если в нашем коде после При ошибке Перейти к 0 линия, появится сообщение об ошибке по умолчанию для Excel. В этом примере у нас уже есть лист с именем Sheet1 в ActiveWorkbook как код над При ошибке Перейти к 0 скрывает лист, но не удаляет его. Затем отобразится сообщение об ошибке Excel по умолчанию, указывающее, что имя листа уже занято.

При ошибке Перейти к Линия

Мы также можем заставить наш код перейти на другую строку кода, используя При ошибке Goto Линия который сообщает VBA перейти к определенной строке кода в случае возникновения ошибки.

123456789101112 Sub ErrorGoToLine ()При ошибке Возобновить ДалееDim ws как рабочий листДля каждой страницы в ActiveWorkbook.Sheetsws.Visible = ЛожьСледующий wsПри ошибке GoTo errhandlerActiveSheet.Name = "Sheet1"Выйти из подводной лодкиошибся:MsgBox ("Лист с именем Sheet1 уже существует!", VbCritical)Конец подписки

В приведенном выше примере, когда код находит лист «Sheet1», он переходит к строке кода под меткой обработчика ошибок - в этом случае он вызывает настраиваемое окно сообщения, информирующее пользователей о том, что лист уже выходит. После метки обработчика ошибок должно быть двоеточие, чтобы показать VBA, что это метка.

1 ошибся:

Затем код перейдет к строке под меткой и вернет настраиваемое окно сообщения.

Это полезно, если вы не хотите, чтобы ваш пользователь мог щелкнуть «Отладка», чтобы войти в ваш код, поскольку стандартное сообщение Excel всегда дает возможность отладить код.

Нам также нужен Выйти из подводной лодки в процедуре. Если есть НЕТ лист с именем Sheet1, тогда эта строка кода будет запущена и переименует активный лист в Sheet1. Затем мы хотим, чтобы код завершился - мы не хотим, чтобы он передавался обработчику ошибок и отображал окно сообщения. Затем строка Exit Sub завершает процедуру и останавливает код.

Вы поможете развитию сайта, поделившись страницей с друзьями

wave wave wave wave wave