Cum se ignoră erorile folosind VBA On Error Reîncepe următoarea declarație?

Excel VBA la eroare Reîncepeți în continuare

VBA On Error Resume Next este o declarație de gestionare a erorilor. Dacă eroarea apare în timpul rulării codului în loc să afișeze eroarea pentru a relua următoarea linie de cod ignorând mesajul de eroare, puteți utiliza această afirmație.

Cei care scriu coduri în mod regulat în Excel VBA știu că pot primi erori chiar și după ce scriu coduri competente, dar vor să ignore această eroare și să continue să ruleze cu următoarele linii de cod. Un exemplu tipic de a primi un mesaj de eroare este atunci când funcția Foaie de lucru VLOOKUP nu găsește valoarea de căutare din matricea de tabel. Nu va afișa o eroare # N / A; mai degrabă, va arunca eroarea. Ca „Nu se poate obține proprietatea VLOOKUP a clasei de funcții a foii de lucru”.

Dacă nu știți de ce primim această eroare, atunci este foarte dificil să remediați eroarea. În VBA, avem o caracteristică numită „ On Error Resume Next ”.

Ce face On Error Resume Next în VBA?

Există anumite zone ca un coder. Vom ști cu siguranță că acest lucru va da un mesaj de eroare, dar trebuie să ignorăm această eroare pentru a continua să trecem prin cod, deci cum să ignorăm această eroare este îndoiala obișnuită pe care toată lumea o are.

Prin utilizarea declarației VBA On Error Resume Next, putem ignora eroarea și relua următoarea linie de cod.

Exemplul nr. 1

Să presupunem că aveți multe foi de lucru și că le ascundeți ca parte a proiectului VBA. De exemplu, mai jos sunt foile de lucru pe care le am în foaia de lucru.

Am scris coduri pentru a ascunde foile „Vânzări și„ Profit ”, iar mai jos este codul.

Cod:

Sub On_Error () Foi de lucru ("Vânzări"). Vizibil = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Acum voi începe să rulez codul rând cu rând folosind tasta F8 .

Dacă mai apăs tasta F8 încă o dată, va ascunde foaia numită „ Vânzări ”.

Acum apăsați încă o dată tasta F8 și vedeți ce se întâmplă.

Am primit o eroare „Subscript out of range” deoarece linia curentă de cod spune mai jos.

Fișe de lucru („Profit 2019”). Vizibil = xlVeryHidden

Încearcă să ascundă foaia de lucru numită „ Profit 2019, dar nu există nicio foaie de lucru cu numele „Profit 2019”.

În aceste cazuri, dacă foaia de lucru nu există în registrul de lucru, trebuie să ignorăm eroarea și să continuăm să rulăm codul ignorând eroarea „Subscript out of range”.

Următoarea linie din cod spune

Fișe de lucru („Profit”). Vizibil = xlVeryHidden

Această foaie de lucru există în acest registru de lucru, deci fără a ignora eroarea, nu putem trece la această linie de cod.

Pentru a ignora această eroare, trebuie să adăugăm declarația „On Error Resume Next”.

Cod:

Sub On_Error () On Error Reîncepeți următoarele foi de lucru ("Vânzări"). Vizibil = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

După cum puteți vedea mai sus, am adăugat declarația din partea de sus a codului înainte ca oricare dintre linii să înceapă. Acum rulați codul și vedeți ce se întâmplă.

Acum sunt în linia căreia i s-a dat eroarea anterior, apăsați tasta F8 și vedeți ce se întâmplă.

Am sărit la următoarea linie de cod fără să afișez nicio eroare din cauza declarației pe care am adăugat-o în partea de sus, care este declarația VBA „On Error Resume Next”.

Exemplul nr. 2

Acum vom vedea cum să folosim această afirmație cu încă un exemplu. Uitați-vă la structura de date de mai jos pentru acest exemplu.

Avem două tabele deasupra primului tabel care au numele Emp și detaliile salariilor lor în cel de-al doilea tabel și avem doar numele Emp, deci, folosind VLOOKUP, trebuie să preluăm detaliile salariului din tabelul din stânga.

Mai jos este codul pe care l-am scris pentru a prelua detaliile.

Cod:

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 Sub

Acum rulați codul rând cu rând și vedeți ce se întâmplă.

După executarea primului cod de celulă, am obținut rezultatul pentru primul angajat. Repetați același lucru și pentru al doilea angajat.

De data aceasta am primit mesajul de eroare. Să ne uităm la al doilea nume de angajat din tabel.

The second employee name is “Gayathri,” but this name doesn’t not exists in the first table, so the VBA VLOOKUP function doesn’t return “#N/A” error when the VLOOKUP doesn’t find the lookup value from the table; rather, it gives the above error message.

Our aim is if the employee name doesn’t find in the table, then we need an empty cell for that employee and ignore the error and give results for the remaining names.

We need to add the “On Error Resume Next” statement inside the loop.

Code:

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) Next k End Sub

Now run the code and see the result.

Două nume de angajați, „ Gayathri & Karanveer, nu se află pe listă, deci acele coduri de linie trebuie să fi întâmpinat o eroare, deoarece am adăugat o declarație de gestionare a erorilor „ On Error Resume Next ”, a ignorat acea linie de cod și a reluat pentru următorul angajat.

Lucruri de reținut aici

  • „On Error Resume Next” este declarația de gestionare a erorilor atunci când trebuie să ignorăm eroarea cunoscută.
  • Dacă doriți să ignorați mesajul de eroare numai pentru un anumit set de cod, apoi închideți declarația de reluare a erorii următoare adăugând declarația „ On Error GoTo 0 ”.

Articole interesante...