Hvordan ignoreres fejl ved brug af VBA On Error Resume Next Statement?

Excel VBA ved fejl Genoptag næste

VBA On Error Resume Next er en erklæring om fejlhåndtering. Hvis fejlen opstår under kørsel af koden i stedet for at vise fejl for at genoptage den næste kodelinje ved at ignorere fejlmeddelelsen, kan du bruge denne erklæring.

De, der skriver koder regelmæssigt i Excel VBA, ved, at de kan få fejl, selv efter at de har skrevet dygtige koder, men de vil ignorere den fejl og fortsætte med at køre med de næste kodelinjer. Et typisk eksempel på at få en fejlmeddelelse er, når VLOOKUP-regnearkfunktionen ikke finder opslagsværdien fra tabelarrayet. Det returnerer ikke # N / A-fejl; snarere vil det kaste fejlen. Som "Kan ikke hente egenskaben VLOOKUP i regnearkets funktionsklasse."

Hvis du ikke ved, hvorfor vi får denne fejl, er det meget vanskeligt at rette fejlen. I VBA har vi en funktion kaldet " On Error Resume Next ".

Hvad gør fejl ved genoptagelse næste gang i VBA?

Der er visse områder som koder. Vi ved med sikkerhed, at dette vil give en fejlmeddelelse, men vi er nødt til at ignorere denne fejl for at fortsætte igennem koden, så hvordan man ignorerer denne fejl er den almindelige tvivl, som alle har.

Ved at bruge VBA On Error Resume Next-sætning kan vi ignorere fejlen og genoptage den næste kodelinje.

Eksempel nr. 1

Antag, at du har mange regneark, og at du gemmer nogle af dem som en del af VBA-projektet. For eksempel er nedenunder de regneark, jeg har i mit regneark.

Jeg har skrevet koder for at skjule "Salg &" Profit "ark, og nedenfor er koden.

Kode:

Under On_Error () regneark ("Salg"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Nu begynder jeg at køre koden linje for linje ved hjælp af F8- tasten.

Hvis jeg trykker endnu en gang på F8- tasten, skjuler det arket med navnet " Salg ".

Tryk nu på F8-tasten en gang til og se hvad der sker.

Vi har fået en "Subscript out of range" -fejl, fordi den aktuelle kodelinje siger nedenstående.

Arbejdsark ("Profit 2019"). Synlig = xlVeryHidden

Det forsøger at skjule regnearket med navnet " Profit 2019 ", men der er intet regneark med navnet "Profit 2019".

I disse tilfælde, hvis regnearket ikke findes i projektmappen, er vi nødt til at ignorere fejlen og fortsætte med at køre koden ved at ignorere fejlen "Subscript out of range".

Den næste linje i koden siger

Arbejdsark ("Profit"). Visible = xlVeryHidden

Dette regneark findes i denne projektmappe, så uden at ignorere fejlen, kan vi ikke flytte til denne kodelinje.

For at ignorere denne fejl skal vi tilføje "On Error Resume Next" -erklæringen.

Kode:

Sub On_Error () Ved fejl Genoptag næste regneark ("Salg"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Som du kan se ovenfor, har jeg tilføjet udsagnet øverst i koden, før nogen af ​​linjerne starter. Kør nu koden og se hvad der sker.

Nu er jeg i den linje, som tidligere fik fejlen, skal du trykke på F8-tasten og se, hvad der sker.

Jeg er sprunget til næste linje kode uden at vise nogen fejl på grund af den erklæring, vi har tilføjet øverst, hvilket er "On Error Resume Next" VBA-sætning.

Eksempel 2

Nu vil vi se, hvordan vi bruger denne erklæring med endnu et eksempel. Se nedenstående datastruktur for dette eksempel.

Vi har to tabeller over den første tabel, der har Emp-navn og deres løndetaljer i den anden tabel, og vi har kun Emp-navn, så ved at bruge VLOOKUP er vi nødt til at hente lønoplysningerne fra venstre sidetabel.

Nedenfor er den kode, jeg havde skrevet for at hente detaljerne.

Kode:

Sub On_Error1 () Dim k så længe For k = 2 til 8 celler (k, 6). Værdi = WorksheetFunction.VLookup (Celler (k, 5), Range ("A: B"), 2, 0) Næste k End Sub

Kør nu koden linje for linje og se hvad der sker.

Når vi kører den første cellekode, har vi fået resultatet for den første medarbejder. Gentag det samme for den anden medarbejder også.

Denne gang har vi fået fejlmeddelelsen. Lad os se på det andet medarbejdernavn i tabellen.

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.

To medarbejdernavne, " Gayathri & Karanveer ", er ikke der på listen, så disse linjekoder skal have stødt på en fejl, da vi har tilføjet en erklæring om fejlhåndtering af " On Error Resume Next ", den har ignoreret denne kodelinje og genoptaget til den næste medarbejder.

Ting at huske her

  • “On Error Resume Next” er fejlhåndteringserklæringen, når vi skal ignorere den kendte fejl.
  • Hvis du kun vil ignorere fejlmeddelelsen for et bestemt sæt kode, skal du lukke on-genoptag næste sætning ved at tilføje " On Error GoTo 0 " -sætningen.

Interessante artikler...