Kuidas ignoreerida vigu VBA abil On Error Resume Next Statement?

Lang L: none (table-of-contents)

Exceli VBA sisselülitamisel viga jätkub järgmine

VBA On Error Resume Next on tõrkeotsingu lause. Kui tõrge ilmneb koodi käivitamisel vea kuvamise asemel, saate järgmise koodirea jätkamiseks veateadet eirates kasutada seda lauset.

Need, kes kirjutavad excelis VBA-s regulaarselt koode, teavad, et neil võib ilmneda vigu ka pärast oskuslike koodide kirjutamist, kuid nad soovivad seda viga ignoreerida ja jätkavad järgmise koodireaga töötamist. Üks tüüpiline näide tõrketeate saamisest on see, kui töölehe VLOOKUP funktsioon ei leia tabeli massiivi otsingu väärtust. See ei anna viga # N / A; pigem viskab see vea. Nagu "töölehe funktsiooniklassi atribuuti VLOOKUP ei õnnestu saada."

Kui te ei tea, miks meil see viga ilmneb, on vea parandamine väga keeruline. VBA-s on meil funktsioon nimega " On Error Resume Next ".

Mida vea jätkamise korral järgmine VBA teeb?

Kodeerijana on teatud piirkonnad. Me teame kindlalt, et see annab veateate, kuid peame seda viga koodi jätkamiseks ignoreerima, nii et kuidas seda viga ignoreerida, on kõigil tavaline kahtlus.

Kasutades lauset VBA On Error Resume Next, võime viga ignoreerida ja jätkata järgmise koodirea jätkamist.

Näide 1

Oletame, et teil on palju töölehti ja mõned neist peidate VBA projekti raames. Näiteks on allpool toodud töölehed, mis mul töölehel on.

Olen kirjutanud koodid, et peita lehed „Müük ja kasum“ ning kood on allpool.

Kood:

Sub On_Error () töölehed ("Müük"). Visible = xlVeryHidden töölehed ("Kasum 2019"). Visible = xlVeryHidden töölehed ("Kasum"). Visible = xlVeryHidden End Sub

Nüüd hakkan F8- klahvi abil koodide kaupa rea ​​kaupa käitama .

Kui vajutan veel kord klahvi F8 , peidab see lehe nimega „ Müük “.

Nüüd vajutage veel kord klahvi F8 ja vaadake, mis juhtub.

Meil on viga „Alaindeks vahemikust väljas”, kuna praegune koodirida ütleb allpool.

Töölehed ("Kasum 2019"). Nähtav = xlVeryHidden

See püüab peita töölehte nimega „ Kasum 2019 ”, kuid ühtegi töölehte nimega „Kasum 2019” pole.

Sellistel juhtudel, kui töövihikut pole töövihikus olemas, peame viga ignoreerima ja jätkama koodi käivitamist, ignoreerides tõrke „Alaindeks vahemikust väljas”.

Koodi järgmine rida ütleb

Töölehed ("Kasum"). Nähtav = xlVeryHidden

See tööleht on selles töövihikus olemas, nii et viga ignoreerimata ei saa me sellele koodireale liikuda.

Selle vea ignoreerimiseks peame lisama avalduse „On Error Resume Next”.

Kood:

Sub On_Error () On Error Jätka järgmisi töölehti ("Müük"). Visible = xlVeryHidden töölehed ("Kasum 2019"). Visible = xlVeryHidden töölehed ("Kasum"). Visible = xlVeryHidden End Sub

Nagu ülal näete, olen enne mõne rea algust lisanud lause ülaosasse. Nüüd käivitage kood ja vaadake, mis juhtub.

Nüüd olen selles reas, millele varem viga anti, vajutage klahvi F8 ja näen, mis juhtub.

Olen hüpanud järgmisele koodireale ilma ühtegi viga kuvamata ülaosas lisatud avalduse tõttu, milleks on VBA lause „On Error Resume Next”.

Näide 2

Nüüd näeme, kuidas seda väidet veel ühe näitega kasutada. Selle näite jaoks vaadake allpool olevat andmestruktuuri.

Esimese tabeli kohal on kaks tabelit, mille teises tabelis on Emp nimi ja nende palgaandmed ning meil on ainult empi nimi, nii et VLOOKUPi abil peame palga üksikasjad tooma vasakpoolsest tabelist.

Allpool on kood, mille olin detailide toomiseks kirjutanud.

Kood:

Sub On_Error1 () Dim k nii kaua, kui k = 2 kuni 8 lahtrit (k, 6). Väärtus = WorksheetFunction.VLookup (lahtrid (k, 5), vahemik ("A: B"), 2, 0) Järgmine k lõpp Alam

Nüüd käivitage kood rida realt ja vaadake, mis juhtub.

Esimese lahtrikoodi käivitamisel oleme saanud esimese töötaja tulemuse. Korrake sama ka teise töötaja puhul.

Seekord on meil veateade. Vaatame tabeli teist töötaja nime.

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.

Kaks töötajate nime, Gayathri ja Karanveer, pole nimekirjas, nii et nendel liinikoodidel peab olema tõrge, kuna oleme lisanud tõrkeotsingu avalduse „ On Error Resume Next ”, see eiras seda koodirida ja jätkas järgmisele töötajale.

Siinkohal meeldejäävad asjad

  • „On Error Resume Next” on tõrkeotsingu lause, kui peame teadaolevat viga ignoreerima.
  • Kui soovite ignoreerida tõrketeadet ainult konkreetse koodikomplekti kohta, sulgege järgmine lause sisselülitatud vea jätkamisel, lisades lause „ On Error GoTo 0 ”.

Huvitavad Artiklid...