Този урок ще покаже как да се гарантира, че VBA пренебрегва грешка при изпълнение на вашия код.
Понякога, когато конструирате VBA код, всъщност искате VBA да игнорира ред код, когато възникне грешка. Това всъщност може да бъде доста полезно, ако например искате да изтриете лист, ако той съществува, но пренебрегнете този ред код, ако листът не съществува.
(Вижте нашето Ръководство за обработка на грешки за повече информация относно грешките на VBA)
На грешка възобновяване следващо
За да игнорираме ред код в процедура, използваме На грешка възобновяване следващо изявление.
123456 | Sub TestErrorIgnore ()На грешка възобновяване следващоActiveWorkbook.Sheets ("Sheet4"). ИзберетеActiveSheet.Delete'още код тукEnd Sub |
В горния пример, an На грешка възобновяване следващо изявлението е поставено в горната част на процедурата. След това кодът се конструира, за да избере Sheet4 и след това да го изтрие.
Въпреки това, поради На грешка възобновяване следващо изявление, ако кодът не намери Sheet4, той просто ще продължи към следващия ред и ще изтрие който и да е активен лист, който намери.
Това може да бъде доста опасно, ако искате да изтриете само лист 4, а не само листа, който е активен. За да предотвратим тази грешка, можем да зададем променлива на лист 4 и да изтрием само този лист АКО съществува.
1234567 | Sub TestErrorIgnore ()Затъмнете като работен листНа грешка възобновяване следващоЗадайте ws = ActiveWorkbook.Sheets ("Sheet4")ws.Delete'още код тукEnd Sub |
Сега, когато кодът се изпълнява, само Sheet4 ще бъде изтрит АКО Sheet4 действително съществува. Ако лист 4 не съществува, VBA ще игнорира грешката и ще продължи.
Друг пример за това е, ако искате да изтриете всички листове от работната си книга, като използвате цикъл. Тъй като работната книга на Excel трябва да има поне един лист, кодът ще изтрие всички листове с изключение на един.
123456 | Sub DeleteSheets ()Затъмнете като работен листЗа всеки ws в ActiveWorkbook.Sheetsws.DeleteСледващата wsEnd Sub |
Горният код ще спре с грешка.
Щракване Отстраняване на грешки ще ни въведе в кода с подчертан обиден ред!
Въпреки това, добавяйки На грешка възобновяване следващо ред към кода ще предотврати грешката и програмата винаги ще оставя един лист в работната книга.
12345678 | Sub DeleteSheets ()„добавете ред за грешка тукНа грешка възобновяване следващоЗатъмнете като работен листЗа всеки ws в ActiveWorkbook.Sheetsws.DeleteСледващата wsEnd Sub |
При грешка GoTo 0
Често, ако използвате На грешка възобновяване следващо за да игнорирате грешка, искате улавяне на грешки по -късно в кода или искате кодът ви да спре да работи, ако в бъдеще възникне грешка. Можем да пренастроим обработката на грешки, така че кодът отново да прекъсне грешките, като добавим реда On Error GoTo 0.
12345678 | Sub TestErrorIgnore ()Затъмнете като работен листНа грешка възобновяване следващоЗадайте ws = ActiveWorkbook.Sheets ("Sheet4")ws.DeleteПри грешка GoTo 0'още код тукEnd Sub |