Acest tutorial va arăta cum să vă asigurați că VBA ignoră o eroare atunci când rulați codul.
Uneori, când construiți cod VBA, doriți de fapt ca VBA să ignore o linie de cod atunci când apare o eroare. Acest lucru poate fi de fapt foarte util dacă, de exemplu, doriți să ștergeți o foaie dacă există, dar ignorați acea linie de cod dacă foaia nu există.
(Consultați Ghidul nostru de gestionare a erorilor pentru mai multe informații despre erorile VBA)
La eroare Reluați în continuare
Pentru a ignora o linie de cod într-o procedură, folosim La eroare Reluați în continuare afirmație.
123456 | Sub TestErrorIgnore ()La eroare Reluați în continuareActiveWorkbook.Sheets ("Sheet4"). SelectațiActiveSheet.Elete'mai multe coduri aiciSfârșitul Sub |
În exemplul de mai sus, un La eroare Reluați în continuare declarația a fost plasată în partea de sus a procedurii. Codul este apoi construit pentru a selecta Sheet4 și apoi șterge-l.
Cu toate acestea, din cauza La eroare Reluați în continuare declarație, dacă codul nu găsește Sheet4, va trece la următoarea linie și va șterge oricare foaie activă pe care o găsește.
Acest lucru poate fi destul de periculos dacă ați dorit să ștergeți doar foaia 4 și nu doar foaia care este activă. Pentru a preveni această eroare, putem seta o variabilă la foaia 4 și șterge doar acea foaie DACĂ există.
1234567 | Sub TestErrorIgnore ()Dim ws Ca foaie de lucruLa eroare Reluați în continuareSet ws = ActiveWorkbook.Sheets ("Sheet4")ws. Ștergeți'mai multe coduri aiciSfârșitul Sub |
Acum, când codul este rulat, numai Sheet4 va fi șters DACĂ Sheet4 există de fapt. Dacă foaia 4 nu există, VBA va ignora eroarea și va continua.
Un alt exemplu în acest sens este dacă doriți să ștergeți toate foile din registrul de lucru folosind o buclă. Deoarece un registru de lucru Excel trebuie să aibă cel puțin o foaie, codul va șterge toate foile, cu excepția uneia.
123456 | Sub DeleteSheets ()Dim ws Ca foaie de lucruPentru fiecare ws din ActiveWorkbook.Sheetsws. ȘtergețiUrmătorul wsSfârșitul Sub |
Codul de mai sus se va opri cu o eroare.
Dând clic Depanare ne va duce în cod cu linia ofensatoare evidențiată!
Cu toate acestea, adăugând La eroare Reluați în continuare linia către cod va preveni eroarea și rutina va lăsa întotdeauna o foaie în registrul de lucru.
12345678 | Sub DeleteSheets ()'adăugați aici o linie de eroareLa eroare Reluați în continuareDim ws Ca foaie de lucruPentru fiecare ws din ActiveWorkbook.Sheetsws. ȘtergețiUrmătorul wsSfârșitul Sub |
La eroare GoTo 0
Adesea dacă folosești La eroare Reluați în continuare pentru a ignora o eroare, doriți ca eroarea să fie capturată mai târziu în cod sau doriți ca codul dvs. să se oprească dacă apare o eroare în viitor. Putem restabili setarea erorii, astfel încât codul să se rupă din nou de erori adăugând linia On Error GoTo 0.
12345678 | Sub TestErrorIgnore ()Dim ws Ca foaie de lucruLa eroare Reluați în continuareSet ws = ActiveWorkbook.Sheets ("Sheet4")ws. ȘtergețiLa eroare GoTo 0'mai multe coduri aiciSfârșitul Sub |