On Error Resume Next: Обработка ошибок в Excel VBA

  • Поделись Этим
Hugh West

В Microsoft Excel VBA обработка ошибок является одной из важнейших задач. Если вы кодер, вы знаете, насколько важна обработка ошибок для создания идеального приложения. Любая ошибка в утверждении может помешать вашему VBA-коду во многих отношениях. Поэтому вы должны быть осторожны, чтобы справиться с этими ошибками во время выполнения VBA-кода. Существует множество ошибок времени выполнения, с которыми вы можете столкнуться при использовании VBA-кода в Excel. Для решенияодин из них, мы используем При ошибке продолжить Далее заявление.

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

Скачать Рабочую тетрадь для практических занятий

VBA On Error Resume Next.xlsm

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

При работе с Microsoft Excel VBA вы столкнетесь с большим количеством ошибок в подпроцедуре. Когда VBA не может выполнить оператор, он выдает ошибку времени выполнения.

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

Теперь с ними можно работать по-разному с помощью некоторых операторов VBA, о которых я расскажу в последующих разделах.

Читать далее: Как исправить ошибку #REF! в Excel (6 решений)

О заявлениях об ошибках в VBA

Для обработки ошибок времени выполнения мы инструктируем Excel с помощью оператора On Error. Он решает, какие операции мы хотим немедленно выполнить в следующий момент. По сути, мы отключаем эти ошибки с помощью таких способов обработки ошибок.

В Excel VBA мы используем три вида операторов (синтаксиса) On Error.

  • При ошибке Перейти строка
  • При ошибке продолжить Далее
  • При ошибке Перейти к 0

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

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

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

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

'On Error Resume Next' в VBA

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

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

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

Помните:

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

Посмотрите на следующий код:

 Sub divide() MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

Мы попытались разделить 5 на 0 и 1. Давайте запустим код. Он выдаст следующий результат:

Выдается ошибка времени выполнения. Мы не можем делить число на 0. При отладке кода вы увидите следующее:

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

Теперь давайте реализуем При ошибке продолжить Далее утверждение перед утверждением об ошибке:

 Sub divide() On Error Resume Next MsgBox 5 / 0 MsgBox 5 / 2 End Sub 

После выполнения кода вы увидите следующее:

Как вы можете видеть, VBA игнорирует строку, которая выдает ошибку, и сразу переходит к следующей строке кода. Таким образом, вы можете использовать функцию При ошибке продолжить Далее оператор для обработки ошибки в Excel VBA.

Примеры 'On Error Resume Next' в VBA

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

1. Заявление 'On Error Resume Next' для скрытия рабочих листов

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

Взгляните на следующий снимок экрана:

Здесь у нас есть четыре рабочих листа. Мы скроем их все с помощью следующего кода VBA:

 Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

Когда вы выполните следующий код, вы увидите следующую ошибку времени выполнения:

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

 Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub 

После завершения выполнения кода VBA вы увидите следующий результат:

В итоге после выполнения вы не увидите никаких ошибок. Итак, наш оператор On Error Resume Next отлично сработал в коде VBA.

Читать далее: Ошибки в Excel и их значение (15 различных ошибок)

2. Функция VLOOKUP с функцией 'On Error Resume Next' в VBA

В этом примере я покажу пример функция VLOOKUP в VBA Теперь, этот код VBA также включает в себя При ошибке продолжить Далее заявление.

Взгляните на следующий снимок экрана:

Здесь вы видите имена некоторых людей и их возраст. В соседней таблице мы будем использовать функцию VLOOKUP чтобы узнать имя и возраст человека.

Для этого введите следующий код:

 Sub VLOOKUP_Function() Dim i As Long For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

Теперь запустите макрос. Вы увидите следующую ошибку:

Это ошибка времени выполнения. Почему это происходит? Взгляните на набор данных еще раз:

Как вы можете видеть, нет данных для "Aaron" и "Emma". Поэтому выполняется только функция VLOOKUP для первой записи. После этого он останавливает выполнение. Теперь, если вы хотите проигнорировать ошибку и продолжить поиск остальных возрастов, используйте команду При ошибке продолжить Далее заявление.

 Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub 

После выполнения кода VBA вы увидите следующий результат:

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

Подробнее: [Исправлено] Excel обнаружил проблему с одной или несколькими ссылками на формулы в этом рабочем листе

Выключите функцию "При ошибке возобновить следующую" с помощью Excel VBA

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

Общее применение:

Sub error_handling()

Чтобы игнорировать ошибки

При ошибке продолжить Далее

// строки кодов

Чтобы включить обработку ошибок

On Error GoTo 0

// строки кодов

End sub

Посмотрите на следующий код VBA:

 Sub error_handling() Dim i As Long 'для игнорирования ошибки On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i 'для выключения при ошибке Resume Next On Error GoTo 0 MsgBox i / 0 End Sub 

Ранее мы использовали код для VLOOKUP Здесь добавлен дополнительный фрагмент кода для наглядности. Наш код будет игнорировать ошибки при выполнении функции VLOOKUP но он активирует обработку ошибок после того, как On Error GoTo 0 заявление.

Читать далее: Excel VBA: отключение функции "При ошибке продолжить далее"

VBA 'On Error GoTo'

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

1. VBA On Error GoTo 0

Сайт On Error Goto 0 является встроенной настройкой Excel, если в ваших кодах нет обработчика ошибок. По сути, это означает, что когда VBA находит ошибку с On Error GoTo 0 он прекратит выполнение кода и покажет традиционное окно с сообщением об ошибке.

On Error GoTo 0 оператор в основном отключает обработку ошибок в данной процедуре. Он не определяет строку 0 как начало кода обработки ошибок, даже если метод содержит строку с номером 0.

Посмотрите на следующий код:

 Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub 

Мы уже показывали вам этот код. Этот код в основном скрывает все рабочие листы в вашей текущей рабочей книге. Теперь у меня действительно есть дополнительный фрагмент кода с On Error GoTo 0 чтобы показать ошибку. Если вы запустите код, вы увидите следующее:

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

2. VBA On Error GoTo line

Теперь вы также можете дать команду Excel выполнить другой сегмент кода, если он обнаружит какую-либо ошибку, используя On Error GoTo line Он указывает Excel на необходимость выполнить что-либо после обнаружения ошибки.

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

Посмотрите на следующий код:

 Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "Существует также лист с таким же именем. Попробуйте другой." End Sub 

Вы видели код в предыдущем примере. Когда мы использовали On Error GoTo 0 это вызвало ошибку. Но здесь мы заменили это на On Error GoTo line заявление.

Теперь запустите код, и вы увидите следующее:

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

Мы также использовали Exit Sub в процедуре. Если нет листа с именем " VLOOKUP ", наш код VBA переименует активный лист. Затем мы должны завершить выполнение на этом месте, потому что нам не нужно переходить к обработчику ошибок и выводить окно сообщения.

VBA "При ошибке" не работает в Excel

Иногда, как бы вы ни старались, метод On Error не срабатывает. Ранее мы реализовали метод On Error. При ошибке для обработки ошибок. Но иногда он будет показывать ошибки, даже если вы используете метод При ошибке продолжить Далее или On Error GoTo 0 В вашем коде может быть несколько причин, которые вам нужно исправить. Я не собираюсь показывать вам это.

Основная причина использования VBA ' On Error' Не работает в Excel - это включение опции "Прерывать при всех ошибках" в Excel.

Выполните следующие действия, чтобы решить эту проблему:

📌 Шаги

  • Сначала нажмите Alt+F11 на клавиатуре, чтобы открыть редактор VBA.
  • Теперь нажмите на Инструменты> Опции.

  • После этого нажмите на кнопку Общий вкладка в Опции диалоговое окно.

  • Здесь вы можете увидеть: " Прерывание при всех ошибках " уже проверен. По сути, это не позволяет вам обрабатывать ошибки.
  • Чтобы изменить его, выберите опцию " Прерывание при необработанных ошибках " и нажмите на OK .

Надеюсь, это поможет решить вашу проблему, связанную с тем, что VBA "On Error" не работает в Excel.

Читать далее: Причины и исправления ошибки NAME в Excel (10 примеров)

💬 О чем нужно помнить

✎ При ошибке возобновить следующий не исправляет ошибки. Он просто игнорирует ошибку и переходит к следующему утверждению.

Excel отлавливает и сохраняет ошибки времени выполнения в объекте Err. Когда мы используем функцию При ошибке продолжить Далее оператор очищает свойства объекта Err.

Вы можете отключить При ошибке продолжить Далее в коде VBA в Excel, добавив оператор On Error GoTo 0 заявление.

Заключение

В заключение, я надеюсь, что это руководство дало вам часть полезных знаний по использованию При ошибке продолжить Далее в Excel VBA. Я рекомендую вам изучить и применить все эти инструкции к вашему набору данных. Скачайте рабочую тетрадь и попробуйте сами. Кроме того, не стесняйтесь оставлять отзывы в разделе комментариев. Ваши ценные отзывы поддерживают нашу мотивацию создавать подобные учебники.

Не забудьте заглянуть на наш сайт Exceldemy.com для решения различных проблем и задач, связанных с Excel.

Продолжайте изучать новые методы и расти!

Хью Уэст — опытный тренер и аналитик Excel с более чем 10-летним опытом работы в отрасли. Он имеет степень бакалавра в области бухгалтерского учета и финансов и степень магистра делового администрирования. Хью страстно любит преподавать и разработал уникальный подход к обучению, которому легко следовать и который легко понять. Его экспертные знания Excel помогли тысячам студентов и специалистов по всему миру улучшить свои навыки и преуспеть в своей карьере. В своем блоге Хью делится своими знаниями со всем миром, предлагая бесплатные учебные пособия по Excel и онлайн-обучение, чтобы помочь отдельным лицам и компаниям полностью раскрыть свой потенциал.