Upravljavci napak vam omogočajo, da določite, kaj se zgodi, ko pride do napake, medtem ko se vaša koda makra Excela izvaja. Obravnavalci napak so vrstice, podobne naslednjim:
Ob napaki Pojdi na MyError
Brez obdelovalcev napak bo vsaka napaka, ki se pojavi v vaši kodi, pozvala Excel, da aktivira sporočilo o napaki, ki je manj koristno, ki običajno ne bo jasno povedalo, kaj se je zgodilo. Vendar pa se lahko s pomočjo obdelovalcev napak odločite, da napako prezrete ali pa elegantno zapustite kodo z lastnim sporočilom uporabniku.
Obstajajo tri vrste stavkov On Error:
-
Ob napaki GoTo SomeLabel: koda skoči na določeno oznako.
-
Ob Error Resume Next: napaka je prezrta in koda se nadaljuje.
-
Ob napaki GoTo 0: VBA se ponastavi na običajno vedenje preverjanja napak.
Ob napaki Pojdi na SomeLabel
Včasih napaka v vaši kodi pomeni, da morate elegantno zapustiti postopek in uporabnikom dati jasno sporočilo. V teh situacijah lahko uporabite stavek On Error GoTo, da poveste Excelu, naj skoči na določeno vrstico kode.
Na primer, v naslednjem majhnem koščku kode Excelu poveste, naj vrednost v celici A1 deli z vrednostjo v celici A2, nato pa odgovor postavi v celico A3. enostavno. Kaj bi lahko šlo narobe?
Podmakro1()
Obseg("A3").Vrednost = Obseg("A1").Vrednost/Obseg("A2").Vrednost
Končni sub
Kot kaže, lahko gresta dve veliki stvari narobe. Če celica A2 vsebuje 0, dobite napako deljenja z 0. Če celica A2 vsebuje neštevilsko vrednost, dobite napako neujemanja vrste.
Če se želite izogniti neprijetnemu sporočilu o napaki, lahko Excelu poveste, da ob napaki želite, da izvajanje kode skoči na oznako, imenovano MyExit.
V naslednji kodi oznaki MyExit sledi sporočilo uporabniku, ki daje prijazen nasvet namesto neprijetnega sporočila o napaki. Upoštevajte tudi Exit Sub vrstico pred oznako MyExit, ki zagotavlja, da bo koda preprosto zapustila, če ne bo prišlo do napake:
Podmakro1()
Ob napaki GoTo MyExit
Obseg("A3").Vrednost = Obseg("A1").Vrednost/Obseg("A2").Vrednost
Izhod Sub
moj izhod:
MsgBox "Prosimo, uporabite veljavne številke, ki niso nič"
Končni sub
Ob napaki Nadaljuj naprej
Včasih želite, da Excel prezre napako in preprosto nadaljuje z izvajanjem kode. V teh primerih lahko uporabite stavek On Error Resume Next.
Naslednji del kode je na primer namenjen brisanju datoteke z imenom GhostFile.exe iz imenika C:Temp. Ko je datoteka izbrisana, lepo sporočilo uporabniku pove, da datoteke ni več:
Podmakro1()
Ubijte "C:TempGhostFile.exe"
MsgBox "Datoteka je bila izbrisana."
Končni sub
Koda deluje odlično, če res obstaja datoteka za brisanje. Če pa iz nekega razloga datoteka, imenovana GhostFile.exe, ne obstaja v pogonu C:Temp, se prikaže napaka.
V tem primeru vam je vseeno, če datoteke ni, ker jo boste vseeno izbrisali. Tako lahko preprosto prezrete napako in nadaljujete s kodo.
Z uporabo stavka On Error Resume Next se koda izvaja ne glede na to, ali ciljna datoteka obstaja ali ne:
Podmakro1()
Ob napaki Nadaljuj naprej
Ubijte "C:TempGhostFile.exe"
MsgBox "Datoteka je bila izbrisana."
Končni sub
Ob napaki Pojdi na 0
Pri uporabi določenih stavkov o napakah bo morda treba ponastaviti vedenje preverjanja napak v VBA. Če želite razumeti, kaj to pomeni, si oglejte naslednji primer.
Tukaj najprej želite izbrisati datoteko z imenom GhostFile.exe iz imenika C:Temp. Da bi se izognili napakam, ki lahko izvirajo iz dejstva, da ciljna datoteka ne obstaja, uporabite stavek Ob napaki Nadaljuj naprej. Po tem poskusite narediti nekaj sumljive matematike tako, da delite 100/Mike:
Podmakro1()
Ob napaki Nadaljuj naprej
Ubijte "C:TempGhostFile.exe"
Obseg("A3").Vrednost = 100 / "Mike"
Končni sub
Zagon tega dela kode bi moral ustvariti napako zaradi mehke matematike, vendar ne. zakaj? Ker je bilo zadnje navodilo, ki ste ga dali kodi, On Error Resume Next. Vsaka napaka, ki se pojavi po tej vrstici, je dejansko prezrta.
Če želite odpraviti to težavo, lahko uporabite stavek On Error GoTo 0 za nadaljevanje običajnega preverjanja napak:
Podmakro1()
Ob napaki Nadaljuj naprej
Ubijte "C:TempGhostFile.exe"
Ob napaki Pojdi na 0
Obseg("A3").Vrednost = 100 / "Mike"
Končni sub
Ta koda bo prezrla napake do stavka On Error GoTo 0. Po tej izjavi se koda vrne na običajno preverjanje napak in sproži pričakovano napako, ki izhaja iz mehke matematike.