Kaip nepaisyti klaidų naudojant „VBA On Error Resume Next“ teiginį?

„Excel VBA On Error“ atnaujinta toliau

VBA On Error Resume Next yra klaidų tvarkytuvo teiginys. Jei klaida įvyksta vykdant kodą, o ne rodant klaidą, tęsti kitą kodo eilutę ignoruojant klaidos pranešimą, galite naudoti šį teiginį.

Tie, kurie reguliariai rašo kodus „Excel“ VBA, žino, kad net ir parašę įgudusius kodus gali sulaukti klaidų, tačiau jie nori tos klaidos nepaisyti ir toliau veikti su kitomis kodo eilutėmis. Vienas tipiškų klaidos pranešimo pavyzdžių yra tas, kai VLOOKUP darbalapio funkcija neranda paieškos vertės iš lentelės masyvo. Tai negrąžins klaidos Nr. N / A; veikiau, tai išmes klaidą. Kaip „Nepavyko gauti darbalapio funkcijų klasės ypatybės VLOOKUP“.

Jei nežinote, kodėl gauname šią klaidą, labai sunku ištaisyti klaidą. VBA turime funkciją, pavadintą „ On Error Resume Next “.

Ką „VBA“ atnaujina toliau atlikus klaidą?

Yra tam tikros sritys kaip koduotojas. Mes tikrai žinosime, kad tai suteiks klaidos pranešimą, tačiau turime nepaisyti šios klaidos, kad galėtume toliau pereiti kodą, taigi, kaip ignoruoti šią klaidą, kyla visų abejonių.

Naudodami „VBA On Error Resume Next“ teiginį, mes galime nepaisyti klaidos ir atnaujinti kitą kodo eilutę.

1 pavyzdys

Tarkime, kad turite daug darbalapių ir kai kuriuos iš jų slepiate kaip VBA projekto dalį. Pavyzdžiui, žemiau pateikiami darbalapiai, kuriuos turiu savo darbalapyje.

Aš parašiau kodus paslėpti „Pardavimų ir pelno“ lapus, o žemiau yra kodas.

Kodas:

Sub On_Error () darbalapiai ("Pardavimai"). Visible = xlVeryHidden darbalapiai ("Pelnas 2019"). Visible = xlVeryHidden darbalapiai ("Pelnas"). Visible = xlVeryHidden End Sub

Dabar aš pradėsiu vykdyti kodo eilutę pagal eilutę naudodamas F8 klavišą.

Jei dar kartą paspausiu klavišą F8 , jis paslėps lapą pavadinimu „ Pardavimai “.

Dabar dar kartą paspauskite klavišą F8 ir pažiūrėkite, kas vyksta.

Gavome klaidą „Subscript out of range“, nes dabartinė kodo eilutė sako toliau.

Darbalapiai („Pelnas 2019“). Matoma = xlVeryHidden

Bandoma paslėpti darbalapį pavadinimu „ Pelnas 2019 “, tačiau darbalapio pavadinimu „Pelnas 2019“ nėra.

Tokiais atvejais, jei darbaknygės darbalapio nėra, turime nepaisyti klaidos ir toliau vykdyti kodą, nepaisydami klaidos „Abonementas už diapazono ribų“.

Kitoje eilutėje kode sakoma

Darbalapiai („Pelnas“). Matoma = xlVeryHidden

Šis darbalapis egzistuoja šioje darbaknygėje, todėl, nepaisydami klaidos, negalime pereiti prie šios kodo eilutės.

Norėdami ignoruoti šią klaidą, turime pridėti teiginį „On Error Resume Next“.

Kodas:

Sub On_Error () On Error Tęsti kitus darbalapius („Pardavimai“). Visible = xlVeryHidden darbalapiai („Pelnas 2019“). Visible = xlVeryHidden darbalapiai („Pelnas“). Visible = xlVeryHidden End Sub

Kaip matote aukščiau, prieš prasidedant bet kuriai eilutei, pridėjau sakinį kodo viršuje. Dabar paleiskite kodą ir sužinokite, kas atsitiks.

Dabar esu eilutėje, kuriai anksčiau buvo suteikta klaida, paspauskite klavišą F8 ir pažiūrėkite, kas atsitiks.

Peršokau į kitą kodo eilutę nerodydamas klaidos dėl teiginio, kurį pridėjome viršuje, tai yra „On Error Resume Next“ VBA sakinys.

2 pavyzdys

Dabar pamatysime, kaip naudoti šį teiginį su dar vienu pavyzdžiu. Šiame pavyzdyje žiūrėkite žemiau esančią duomenų struktūrą.

Virš pirmosios lentelės turime dvi lenteles, kurių antroje lentelėje yra „Emp Name“ ir jų atlyginimo duomenys, o mes turime tik „Emp Name“, todėl naudodami VLOOKUP turime gauti atlyginimo informaciją iš kairės pusės lentelės.

Žemiau yra kodas, kurį parašiau norėdamas gauti išsamią informaciją.

Kodas:

Sub On_Error1 () Dim k As Long For k = 2–8 langeliai (k, 6). Vertė = WorksheetFunction.VLookup (langeliai (k, 5), diapazonas ("A: B"), 2, 0) Kitas k pabaiga Sub

Dabar paleiskite kodą eilutėje ir pažiūrėkite, kas atsitiks.

Paleidus pirmąjį langelio kodą, gauname pirmojo darbuotojo rezultatą. Tą patį pakartokite ir antram darbuotojui.

Šį kartą gavome klaidos pranešimą. Pažvelkime į antrą darbuotojo vardą lentelėje.

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.

Dviejų darbuotojų vardų „ Gayathri & Karanveer “ nėra sąraše, todėl šiuose eilutės koduose turėjo būti klaida, nes mes pridėjome klaidų tvarkytuvo pareiškimą „ On Error Resume Next “, jis ignoravo tą kodo eilutę ir atnaujino kitam darbuotojui.

Ką čia reikia atsiminti

  • „On Error Resume Next“ yra klaidų tvarkytuvo sakinys, kai turime nepaisyti žinomos klaidos.
  • Jei norite nepaisyti tik konkretaus kodo rinkinio klaidos pranešimo, uždarykite toliau pateiktą teiginį „ On error tęsti“ pridėdami teiginį „ On Error GoTo 0 “.

Įdomios straipsniai...