При грешка възобновяване Следваща: Обработка на грешки в Excel VBA

  • Споделя Това
Hugh West

В Microsoft Excel VBA обработката на грешки е една от критичните задачи. Ако сте програмист, знаете колко е важно да се обработват грешки, за да се създаде перфектно приложение. Всяка грешка в изявлението може да попречи на вашия VBA код по много начини. Затова трябва да сте внимателни, за да се справите с тези грешки, докато изпълнявате VBA код. Има много грешки по време на изпълнение, с които можете да се сблъскате, докато използвате VBA код в Excel.един от тях, използваме При грешка продължете Next изявление.

В този урок ще се научите да използвате При грешка продължете Next Този урок ще бъде на място с подходящи примери и подходящи илюстрации. Така че, останете с нас.

Изтегляне на работна тетрадка за практика

VBA При грешка възобнови Next.xlsm

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

Когато работите с Microsoft Excel VBA, ще се сблъскате с много грешки във вашата подпроцедура. Когато VBA не може да изпълни дадена декларация, тя изхвърля грешка по време на изпълнение.

Excel автоматично се справя с тези грешки, така че когато се появи грешка по време на изпълнение, той показва съобщение за грешка по подразбиране, както следва:

Сега можете да се справите с тях по различен начин с помощта на някои команди на VBA. Ще ги разгледам в следващите раздели.

Прочетете още: Как да поправите грешката #REF! в Excel (6 решения)

Изявления за грешка във VBA

За да се справим с грешките по време на изпълнение, инструктираме Excel с декларацията On Error (При грешка). Тя решава какъв вид операции искаме да направим веднага след това. По принцип ние деактивираме тези грешки чрез тези видове обработка на грешки.

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

  • При грешка GoTo линия
  • При грешка продължете Next
  • При грешка GoTo 0

Когато откриете грешка, използвайте командата On Error. Защото ако не използвате При грешка декларацията, тези грешки по време на изпълнение ще бъдат катастрофални. Тя ще покаже съобщение за грешка и ще спре изпълнението.

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

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

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

'При грешка възобнови следващия' във VBA

Сега При грешка продължете Next Изявлението казва на VBA да игнорира всички редове от кода, в които има грешки, и да премине веднага към следващия ред от кода. След това кодовете на Excel VBA ще прескочат реда или редовете, в които има грешки, и ще преминат към следващата последователност от код.

Сайтът При грешка продължете Next Това изявление позволява изпълнението да се прескочи, дори ако има грешка при изпълнение. Ако смятате, че определен ред от кода може да предизвика грешка, поставете рутинната процедура за обработка на грешки там, вместо да я поставяте на друго място в процедурата. При грешка продължете Next става неактивна, когато кодът ви извиква друга процедура. Така че, когато се нуждаете от съгласувана обработка на грешки в тази процедура, трябва да стартирате При грешка продължете Next във всеки именуван шаблон.

Това е разумно, когато редът от код, който можете да пропуснете, не е необходим за успешното функциониране на макроса. Но не забравяйте, че може да бъде вредно, ако го използвате неправилно, тъй като може да доведе до непредвидени резултати.

Не забравяйте:

Изпълнението на командата On Error Resume Next не отстранява грешките при изпълнение на програмата. По същество то игнорира грешките, при които изпълнението на VB ще се възобнови от командата, която е генерирала грешката при изпълнение на програмата.

Разгледайте следния код:

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

Опитахме се да разделим 5 с 0 и 1. Нека стартираме кода. Той ще покаже следния резултат:

Това води до грешка по време на изпълнение. Не можем да разделим число на 0. Когато отстраните грешките в кода, ще видите следното:

Когато VB програмата открие грешка, тя незабавно спира процедурата. Тя не изпълнява следващия ред.

Сега нека имплементираме При грешка продължете Next преди изявлението за грешка:

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

След като стартирате кода, ще видите следното:

Както можете да видите, VBA игнорира реда, който предизвиква грешка, и преминава веднага към следващия ред код. По този начин можете да използвате При грешка продължете Next за обработка на грешката в Excel VBA.

Примери за 'При грешка възобнови следващия' във VBA

В следващите раздели ще ви представя два примера за При грешка продължете Next изречение, което можете да приложите в работния си лист на 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 с 'При грешка възобнови следващия' във VBA

В този пример ще покажа пример за функцията VLOOKUP във VBA Сега този код на VBA включва и При грешка продължете Next изявление.

Разгледайте следната снимка на екрана:

Тук можете да видите имената на някои хора и тяхната възраст. В съседната таблица ще използваме 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 След това спира изпълнението. Ако искате да игнорирате грешката и да продължите да търсите останалите възрасти, използвайте При грешка продължете Next изявление.

 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, ще видите следния резултат:

Както можете да видите, чрез прилагането на При грешка продължете Next командата, игнорирахме грешката и намерихме останалите възрасти на лицата. Нашият код VBA не намери никакви данни за Аарон и Ема. Ето защо той игнорира тези стойности и върна останалите стойности в работния лист на Excel.

Прочетете още: [Поправено] Excel откри проблем с една или повече препратки към формула в този работен лист

Изключване на функцията "При грешка възобнови следващия" с Excel VBA

Сега може да се окажете в ситуация, в която искате да игнорирате грешки за определен сегмент от кода VBA. Не забравяйте, че ако използвате изявлението On Error Resume Next (При грешка възобнови следващия) в кода VBA, то ще пропусне всички грешки след него. Ако искате да изключите това и да активирате обработката на грешки за друг сегмент, използвайте При грешка GoTo 0 . Това ще активира отново обработката на грешки.

Обща употреба:

Sub error_handling()

Пренебрегване на грешки

При грешка продължете Next

// редове с кодове

Включване на обработката на грешки

При грешка GoTo 0

//редове с кодове

Край на подточката

Разгледайте следния код VBA:

 Sub error_handling() Dim i As Long 'за игнориране на грешката При грешка възобнови Следваща For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Следваща i 'за изключване при грешка възобнови следващата При грешка GoTo 0 MsgBox i / 0 End Sub 

Използвахме предишния код за VLOOKUP Тук е добавена допълнителна част от кода, за да ви демонстрираме. Нашият код ще игнорира грешките, докато изпълнява функцията VLOOKUP но ще активира обработката на грешки след При грешка GoTo 0 изявление.

Прочетете още: Excel VBA: Изключете функцията "При грешка възобнови следващия"

VBA 'При грешка отиди натам'

Преди това обсъдих обработката на грешките чрез метода On Error. Цялата ни статия беше посветена на При грешка продължете нататък. Съществуват и два вида обработка на грешки, които ще разгледам в следващите раздели.

1. VBA При грешка отидете на 0

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

При грешка 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 

Вече ви показахме този код. Този код на практика скрива всички работни листове в текущата работна книга. Сега наистина имам допълнителна част от кода с При грешка GoTo 0 Ако стартирате кода, ще видите следното:

Тя показва тази грешка, тъй като не можем да имаме листове с едно и също име в активната работна книга.

2. VBA При грешка отидете на ред

Сега можете също така да инструктирате Excel да изпълни друг сегмент от кода, ако открие някаква грешка, като използвате При грешка отидете на линия . Той казва на Excel да изпълни нещо след намиране на грешка.

Аргументът за ред е произволен етикет на ред или номер на ред. Ако нашият код предизвика някаква грешка по време на изпълнение, той ще се премести на реда, предизвиквайки активната при изпълнението обработка на грешката. Не забравяйте, че дефинираният от вас ред трябва да се намира в точната процедура, в която се намира изявлението 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 

Видяхте кода в предишния пример. Когато използвахме При грешка GoTo 0 Но тук го заменихме с При грешка отидете на линия изявление.

Сега стартирайте кода и ще видите следното:

Както можете да видите, не се показва стандартният диалогов прозорец за грешка. Вместо това се показва персонализираният прозорец за съобщения, който създадохме в error_handler Когато Excel открие някаква грешка, той преминава към сегмент error_handler и ни показва полето за съобщения.

Използвахме и Излизане от подсистемата в процедурата. Ако няма лист с име " VLOOKUP ", нашият VBA код ще преименува активния лист. След това трябва да завършим изпълнението тук, защото не е необходимо да продължаваме към обработчика на грешки и да показваме кутията със съобщения.

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

Понякога, колкото и да се стараете, методът On Error не работи. При грешка за обработка на грешките. Но понякога се появяват грешки, дори ако използвате При грешка продължете Next или При грешка GoTo 0 . Възможно е в кода ви да има няколко причини, които трябва да отстраните. Няма да ви показвам това.

Основната причина за използването на VBA ' При грешка Не работи в Excel е включването на опцията "Прекъсване при всички грешки" в Excel.

Следвайте тези стъпки, за да разрешите проблема:

📌 Стъпки

  • Първо, натиснете Alt+F11 на клавиатурата, за да отворите редактора VBA.
  • Сега щракнете върху Инструменти> Опции.

  • След това щракнете върху Обща информация в раздела Опции диалогов прозорец.

  • Тук можете да видите, " Прекъсване при всички грешки " вече е отметнат. Това по същество ви пречи да обработвате грешките.
  • За да го промените, изберете опцията " Прекъсване при необработени грешки " и щракнете върху OK .

Надявам се, че това ще реши проблема ви с VBA "При грешка", който не работи в Excel.

Прочетете още: Причини и корекции на грешка в имената в Excel (10 примера)

💬 Нещата, които трябва да запомните

✎ При грешка възобнови Следваща не поправя грешките. По същество игнорира грешката и преминава към следващото изявление.

Excel улавя и съхранява грешките по време на изпълнение в обект Err. Когато използваме При грешка продължете Next изчиства свойствата на обекта Err.

Можете да изключите При грешка продължете Next във вашия код VBA в Excel, като добавите При грешка GoTo 0 изявление.

Заключение

В заключение се надявам, че този урок ви е предоставил полезни знания за използването на При грешка продължете Next в Excel VBA. Препоръчвам ви да научите и да приложите всички тези инструкции към вашата съвкупност от данни. Изтеглете работната тетрадка за упражнения и ги изпробвайте сами. Също така, не се колебайте да дадете обратна връзка в раздела за коментари. Вашата ценна обратна връзка ни мотивира да създаваме уроци като този.

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

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

Хю Уест е опитен обучител и анализатор на Excel с над 10 години опит в индустрията. Има бакалавърска степен по счетоводство и финанси и магистърска степен по бизнес администрация. Хю има страст към преподаването и е разработил уникален подход на преподаване, който е лесен за следване и разбиране. Неговите експертни познания по Excel са помогнали на хиляди студенти и професионалисти по целия свят да подобрят уменията си и да постигнат отлични резултати в кариерата си. Чрез своя блог Хю споделя знанията си със света, като предлага безплатни уроци за Excel и онлайн обучение, за да помогне на хората и фирмите да достигнат пълния си потенциал.