Acest tutorial va explica declarația VBA On Error Resume Next și Goto.
Chiar și atunci când codul dvs. este perfect construit, este posibil ca utilizatorul să nu facă ceea ce v-ați aștepta. Din acest motiv, trebuie să inserați gestionare de erori în codul dvs. ori de câte ori ar putea exista un motiv pentru care ar putea apărea o eroare.
La eroare Reluați în continuare
Declarația On Error Resume Next îi spune VBA să omită toate liniile de cod care conțin erori și să treacă la următoarea linie. VBA va ignora linia sau liniile cu o eroare și va trece la următoarea linie de cod.
Acest lucru este util atunci când linia de cod care poate fi ignorată nu este critică pentru rularea cu succes a macro-ului, dar poate fi destul de periculoasă dacă este utilizată incorect, deoarece poate da rezultate neintenționate.
De exemplu, în procedura de mai jos:
123456 | Sub HideAllSheets ()Dim ws Ca foaie de lucruPentru fiecare ws din ActiveWorkbook.Sheetsws.Visible = FalseUrmătorul wsSfârșitul Sub |
Dacă rulăm acest cod, vom primi o eroare deoarece nu putem ascunde toate foile de lucru dintr-un registru de lucru - cel puțin un registru de lucru trebuie să rămână vizibil.
Cu toate acestea, dacă modificăm procedura așa cum se arată mai jos, codul va continua după eroare și va lăsa vizibilă ultima foaie din registrul de lucru.
1234567 | Sub HideAllSheets ()La eroare Reluați în continuareDim ws Ca foaie de lucruPentru fiecare ws din ActiveWorkbook.Sheetsws.Visible = FalseUrmătorul wsSfârșitul Sub |
La eroare GoTo 0
Dacă nu avem un controler de erori în codul nostru, La Eroare Goto 0 este setarea implicită Excel. Aceasta înseamnă practic că atunci când apare o eroare cu La eroare GoTo 0, VBA va opri executarea codului și va afișa caseta de mesaj de eroare standard, de exemplu:
Dacă am pus o capcană de eroare de genul La eroare Reluați în continuare în codul nostru, dar apoi dorim să restabilim eroarea la valoarea implicită, putem insera un La Eroare Goto 0 linie în codul nostru.
12345678910 | Sub ErrorGoTo0 ()La eroare Reluați în continuareDim ws Ca foaie de lucruPentru fiecare ws din ActiveWorkbook.Sheetsws.Visible = FalseUrmătorul wsLa eroare GoTo 0„Executați mai multe coduri aici, de exemplu:ActiveSheet.Name = "Sheet1"Sfârșitul Sub |
Acum, dacă va exista o eroare în codul nostru după La Eroare Goto 0 linia, va apărea mesajul de eroare implicit pentru Excel. În acest exemplu, avem deja o foaie numită Sheet1 în ActiveWorkbook ca cod deasupra La Eroare Goto 0 ascunde foaia, dar nu o șterge. Apare apoi mesajul de eroare implicit Excel care indică faptul că numele foii a fost deja luat.
La eroare Mergeți la Linia
De asemenea, putem forța codul nostru să se deplaseze la o altă linie de cod folosind La Eroare Mergeți Linia care spune VBA să meargă la o anumită linie de cod dacă apare o eroare.
123456789101112 | Sub ErrorGoToLine ()La eroare Reluați în continuareDim ws Ca foaie de lucruPentru fiecare ws din ActiveWorkbook.Sheetsws.Visible = FalseUrmătorul wsOn Error GoTo errhandlerActiveSheet.Name = "Sheet1"Ieșiți din Submanipulator:MsgBox („Există deja o foaie numită sheet1!”, VbCritical)Sfârșitul Sub |
În exemplul de mai sus, când codul găsește foaia „Sheet1”, acesta se mută pe linia de cod sub eticheta de gestionare a erorilor - în acest caz, apelează o casetă de mesaje personalizate care îi informează pe utilizatori că foaia iese deja. Eticheta de gestionare a erorilor trebuie să aibă două puncte după aceasta pentru a arăta VBA că este o etichetă.
1 | manipulator: |
Codul va sări apoi în jos pe linia de sub etichetă și va returna caseta de mesaje personalizată.
Acest lucru este util atunci când nu doriți ca utilizatorul dvs. să poată face clic pe Depanare pentru a intra în codul dvs., deoarece mesajul Excel standard oferă întotdeauna o opțiune de Depanare a codului.
De asemenea, avem nevoie de un Ieșiți din Sub în procedură. Daca exista NU o foaie numită Sheet1, atunci acea linie de cod ar rula și va redenumi foaia activă în Sheet1. Vrem apoi ca codul să se încheie - nu dorim ca acesta să treacă la gestionarul de erori și să afișeze caseta de mesaje. Linia Exit Sub iese din procedură și oprește codul.