Excel VBA при грешка Възобновяване нататък
VBA On Error Resume Next е изявление за обработка на грешки. Ако грешката възникне по време на изпълнение на кода, вместо да показва грешка, за да възобнови следващия ред код, като пренебрегне съобщението за грешка, можете да използвате това изявление.
Тези, които пишат редовно кодове в Excel VBA, знаят, че могат да получат грешки дори след писане на опитни кодове, но искат да игнорират тази грешка и да продължат да работят със следващите редове код. Един типичен пример за получаване на съобщение за грешка е, когато функцията VLOOKUP на работен лист не намира справочната стойност от масива на таблицата. Няма да върне # N / A грешка; по-скоро ще изхвърли грешката. Като „Не може да се получи свойството VLOOKUP на функционалния клас на работния лист.“

Ако не знаете защо получаваме тази грешка, тогава е много трудно да се поправи грешката. Във VBA имаме функция, наречена „ След грешка възобновяване “.
Какво прави при грешка при възобновяване след това във VBA?
Има определени области като кодер. Със сигурност ще знаем, че това ще даде съобщение за грешка, но трябва да пренебрегнем тази грешка, за да продължим да преглеждаме кода, така че как да се игнорира тази грешка е често срещаното съмнение, което всеки има.
Използвайки VBA On Error Resume Next statement, можем да игнорираме грешката и да възобновим следващия ред код.
Пример # 1
Да приемем, че имате много работни листове и криете някои от тях като част от проекта VBA. Например, по-долу са работните листове, които имам в моя работен лист.

Написал съм кодове, за да скрия листове „Продажби и печалба“, а по-долу е кодът.
Код:
Sub On_Error () Worksheets ("Продажби"). Visible = xlVeryHidden Worksheets ("Печалба 2019"). Visible = xlVeryHidden Worksheets ("Печалба"). Visible = xlVeryHidden End Sub

Сега ще започна да изпълнявам кода ред по ред, използвайки клавиша F8 .

Ако натисна клавиша F8 още веднъж, той ще скрие листа с име „ Продажби “.


Сега натиснете клавиша F8 още веднъж и вижте какво ще се случи.

Получихме грешка „Индекс извън обхвата“, тъй като текущият ред на кода казва по-долу.
Работни листове („Печалба 2019“). Видим = xlVeryHidden
Опитва се да скрие работния лист, наречен „ Печалба 2019 “, но няма работен лист с името „Печалба 2019“.
В тези случаи, ако работният лист не съществува в работната книга, трябва да игнорираме грешката и да продължим да изпълняваме кода, като игнорираме грешката „Индекс извън обхвата“.
Следващият ред в кода казва
Работни листове („Печалба“). Видим = xlVeryHidden
Този работен лист съществува в тази работна книга, така че без да пренебрегваме грешката, не можем да преминем към този ред код.
За да игнорираме тази грешка, трябва да добавим изявлението „При грешка възобновяване след това“.
Код:
Sub On_Error () При грешка Възобновяване на следващи работни листове („Продажби“). Видим = xlVeryHidden работни листове („Печалба 2019“). Видим = xlVeryHidden работни листове („Печалба“).

Както можете да видите по-горе, добавих изявлението в горната част на кода, преди да започне някой от редовете. Сега стартирайте кода и вижте какво ще се случи.

Сега съм в реда, на който преди това е била дадена грешката, натиснете клавиша F8 и вижте какво ще се случи.

Преминах към следващия ред код, без да показвам никаква грешка, заради изявлението, което сме добавили в горната част, което е „При грешка възобновяване след това“ VBA изявление.
Пример # 2
Сега ще видим как да използваме това изявление с още един пример. Погледнете структурата на данните по-долу за този пример.

Имаме две таблици над първата таблица, които имат Emp Name и данните за тяхната заплата във втората таблица, а ние имаме само Emp Name, така че като използваме VLOOKUP, трябва да извлечем данните за заплатата от лявата странична таблица.
По-долу е кодът, който бях написал, за да извлека подробностите.
Код:
Sub On_Error1 () Dim k As Long For k = 2 To 8 Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Next k End Под

Сега стартирайте кода ред по ред и вижте какво се случва.


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

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

Второто име на служител е „Gayathri“, но това име не съществува в първата таблица, така че функцията VBA VLOOKUP не връща грешка „# N / A“, когато VLOOKUP не намери търсената стойност от маса; по-скоро дава горното съобщение за грешка.
Нашата цел е, ако името на служителя не се намери в таблицата, тогава се нуждаем от празна клетка за този служител и игнорираме грешката и даваме резултати за останалите имена.
Трябва да добавим изявлението „On Error Resume Next“ в цикъла.
Код:
Sub On_Error1 () Dim k As Long For k = 2 To 8 On Error Resume Next Cells (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0 ) Следващ k Край Sub

Сега стартирайте кода и вижте резултата.

Две имена на служители, „ Gayathri & Karanveer “, не са там в списъка, така че тези редови кодове трябва да са срещнали грешка, тъй като сме добавили изявление на манипулатора на грешки на „ On Error Resume Next “, той е игнорирал този ред код и е възобновен за следващия служител.
Неща, които трябва да запомните тук
- “On Error Resume Next” е операторът за обработка на грешки, когато трябва да игнорираме известната грешка.
- Ако искате да игнорирате съобщението за грешка само за конкретен набор от кодове, затворете следващото изявление за възобновяване на грешката, като добавите израза “ On Error GoTo 0 ”.