На продовження теми помилок Далі: Обробка помилок в Excel VBA

  • Поділитися Цим
Hugh West

У Microsoft Excel VBA обробка помилок є одним з найважливіших завдань. Якщо ви програміст, ви знаєте, наскільки важлива обробка помилок для створення ідеального додатка. Будь-яка помилка в операторі може багато в чому перешкодити вашому коду VBA. Отже, ви повинні бути обережними з обробкою цих помилок під час виконання коду VBA. Існує багато помилок під час виконання, з якими ви можете зіткнутися під час використання коду VBA в Excel. Щоб вирішитиодин з них ми використовуємо Після помилки відновити роботу Далі заяву.

У цьому навчальному посібнику ви навчитеся використовувати Після помилки відновити роботу Далі У цьому уроці буде наведено відповідні приклади та ілюстрації. Тож, залишайтеся з нами.

Завантажити Практичний посібник

VBA При помилці відновлення роботи 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. оператор "При помилці продовжити далі" для приховування робочих аркушів

Тепер, в цьому прикладі, я покажу вам код 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 також включає в себе Після помилки відновити роботу Далі заяву.

Погляньте на наступний скріншот:

Тут ви можете побачити імена деяких людей та їх вік. У сусідній таблиці ми будемо використовувати ПЕРЕГЛЯД знайти ім'я та вік людини.

Для цього введіть наступний код:

 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 

Тепер запустіть макрос на виконання, і ви побачите наступну помилку:

Тепер, це помилка під час виконання. Чому це відбувається? Подивіться на набір даних ще раз:

Як бачимо, для "Аарона" та "Емми" даних немає, тому він виконує тільки ПЕРЕГЛЯД Після цього він зупиняє виконання. Тепер, якщо ви хочете проігнорувати помилку і продовжити пошук решти віків, скористайтеся командою Після помилки відновити роботу Далі заяву.

 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()

Ігнорувати помилки

Після помилки відновити роботу Далі

// рядки кодів

Щоб увімкнути обробку помилок

При помилці переходимо до 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 'вимкнути при відновленні помилки On Error GoTo 0 MsgBox i / 0 End Sub 

Раніше ми використовували цей код для ПЕРЕГЛЯД Тут доданий додатковий шматок коду для демонстрації. Наш код буде ігнорувати помилки при виконанні функції ПЕРЕГЛЯД але він активує обробку помилок після того, як При помилці переходимо до 0 заяву.

Читати далі: Excel VBA: вимкніть функцію "При помилці продовжити далі"

VBA 'On Error GoTo' (Перехід при помилці)

Раніше я розглядав обробку помилок методом On Error. Вся наша стаття була присвячена Після помилки продовжити далі. Існує також два типи обробки помилок, про які я розповім у наступних розділах.

1. VBA при помилці переходить в 0

На сьогоднішній день, на жаль, це не так. On Error Goto 0 є вбудованим параметром Excel, якщо у вашому коді немає обробника помилок. Це означає, що коли VBA знаходить помилку з оператором При помилці переходимо до 0 він зупинить виконання коду і покаже своє традиційне вікно з повідомленням про помилку.

При помилці переходимо до 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 

Ми вже показували вам цей код. Цей код в основному приховує всі аркуші у вашій поточній книзі. Тепер у мене дійсно є додатковий фрагмент коду з При помилці переходимо до 0 Якщо запустити код на виконання, то побачимо наступне:

Вона показує цю помилку, тому що в активній книзі не може бути аркушів з однаковими іменами.

2. VBA On Error GoTo line

Тепер ви також можете вказати Excel запустити інший сегмент коду, якщо він знайде будь-яку помилку, використовуючи команду На лінії "Помилка GoTo Він вказує 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 

Ви бачили код в попередньому прикладі. Коли ми використовували При помилці переходимо до 0 Це викликало помилку. Але тут ми замінили його на На лінії "Помилка GoTo заяву.

Тепер запустіть код і ви побачите наступне:

Як ви можете бачити, він не показує нам стандартне діалогове вікно помилки. Замість цього він показує користувальницьке вікно повідомлення, яке ми створили в обробник_помилки Коли Excel знаходить помилку, він переходить до сегмента обробник_помилки і показує нам вікно з повідомленням.

Ми також використовували Exit Sub У разі відсутності аркуша з назвою " ПЕРЕГЛЯД ", наш VBA-код перейменує активний аркуш. На цьому виконання завершиться, оскільки нам не потрібно переходити до обробника помилок і виводити вікно повідомлення.

В Excel не працює функція VBA "Про помилку

Іноді, як не старайся, метод On Error не спрацьовує. Раніше ми реалізували Про помилку Але, іноді він буде показувати помилки, навіть якщо ви використовуєте метод Після помилки відновити роботу Далі або При помилці переходимо до 0 У вашому коді може бути кілька причин, які ви повинні виправити, я не буду вам їх показувати.

Основна причина для VBA ' "Про помилку Не працювати в Excel - увімкнення опції "Переривання при всіх помилках" в Excel.

Щоб вирішити цю проблему, виконайте наступні кроки:

📌 Кроки

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

  • Після цього натисніть на кнопку Генеральний у вкладці Опції діалогове вікно.

  • Тут ви можете побачити, " Робота над помилками " вже поставлена галочка, що в принципі заважає працювати з помилками.
  • Щоб змінити його, виберіть опцію " Перерва на необроблені помилки " і натисніть на кнопку ГАРАЗД. .

Сподіваюся, це вирішить вашу проблему з непрацюючою функцією VBA "On Error" в Excel.

Читати далі: Причини та виправлення помилки NAME в Excel (10 прикладів)

💬 Що варто пам'ятати

✎ При помилці продовжити далі не виправляє помилки, а фактично ігнорує помилку і переходить до наступного твердження.

Excel перехоплює і зберігає помилки часу виконання в об'єкті Err. Коли ми використовуємо функцію Після помилки відновити роботу Далі очищає властивості об'єкту Err.

Ви можете вимкнути функцію Після помилки відновити роботу Далі в код VBA в Excel, додавши оператор При помилці переходимо до 0 заяву.

Висновок

На завершення, я сподіваюся, що цей посібник надав вам частину корисних знань, які допоможуть вам використовувати Після помилки відновити роботу Далі Я рекомендую вам вивчити і застосувати всі ці інструкції до вашого набору даних. Завантажте практичний посібник і спробуйте самостійно. Також не соромтеся залишати відгуки в розділі коментарів. Ваші цінні відгуки мотивують нас створювати подібні посібники.

Не забувайте слідкувати за новинами на нашому сайті Exceldemy.com для вирішення різних проблем, пов'язаних з Excel, та їх вирішення.

Вчіться новим методам і продовжуйте розвиватися!

Г’ю Вест — досвідчений тренер і аналітик Excel із понад 10-річним досвідом роботи в галузі. Він має ступінь бакалавра з бухгалтерського обліку та фінансів і ступінь магістра з ділового адміністрування. Г’ю має пристрасть до викладання та розробив унікальний підхід до викладання, який легко зрозуміти та дотримуватися. Його експертне знання Excel допомогло тисячам студентів і професіоналів у всьому світі вдосконалити свої навички та досягти успіху в кар’єрі. У своєму блозі Г’ю ділиться своїми знаннями зі світом, пропонуючи безкоштовні навчальні посібники з Excel та онлайн-навчання, щоб допомогти окремим особам і компаніям повністю розкрити свій потенціал.