Veakäsitlejad võimaldavad teil määrata, mis juhtub, kui Exceli makrokoodi käitamisel ilmneb tõrge. Veakäsitlejad on read, mis on sarnased järgmistega:
Viga Mine MinuError
Ilma veakäsitlejateta sunnib teie koodis ilmnev viga Excelil aktiveerima vähem kasuliku veateate, mis tavaliselt ei anna juhtunut selgelt edasi. Veakäsitlejate abil saate aga valida, kas tõrget ignoreerida või koodist elegantselt kasutajale saadetud sõnumiga väljuda.
Error avaldusi on kolme tüüpi:
-
Error GoTo SomeLabel: kood hüppab määratud sildi juurde.
-
Vea korral Jätka järgmiseks: tõrget eiratakse ja kood jätkub.
-
Error GoTo 0 korral: VBA lähtestab tavapärasele veakontrolli käitumisele.
On Error GoTo SomeLabel
Mõnikord tähendab viga teie koodis, et peate protseduurist graatsiliselt väljuma ja andma kasutajatele selge sõnumi. Sellistes olukordades saate kasutada avaldust On Error GoTo, et käskida Excelil liikuda teatud koodireale.
Näiteks järgmises väikeses kooditükis käsite Excelil jagada lahtris A1 olev väärtus lahtris A2 oleva väärtusega ja seejärel asetada vastus lahtrisse A3. Lihtne. Mis võib valesti minna?
Alammakro1()
Vahemik("A3").Väärtus = Vahemik("A1").Väärtus / Vahemik("A2").Väärtus
Lõpeta alam
Nagu selgub, võib valesti minna kaks peamist asja. Kui lahter A2 sisaldab 0, saate 0-ga jagamise vea. Kui lahter A2 sisaldab mittenumbrilist väärtust, kuvatakse tüübi mittevastavuse tõrge.
Vastiku veateate vältimiseks võite Excelile öelda, et tõrke korral soovite, et koodi täitmine hüppaks sildile nimega MyExit.
Järgmises koodis järgneb MyExit sildile vastiku veateate asemel sõnum kasutajale, mis annab sõbralikku nõu. Pange tähele ka MyExit sildi ees olevat Exit Sub-rida, mis tagab, et kood lihtsalt väljub, kui viga ei esine:
Alammakro1()
Vea korral Mine MyExit
Vahemik("A3").Väärtus = Vahemik("A1").Väärtus / Vahemik("A2").Väärtus
Välju Sub
MyExit:
MsgBox "Palun kasutage kehtivaid nullist erinevaid numbreid"
Lõpeta alam
Vea korral Jätka järgmisena
Mõnikord soovite, et Excel eiraks viga ja jätkaks lihtsalt koodi käitamist. Nendes olukordades saate kasutada avaldust On Error Resume Next.
Näiteks järgmine koodilõik on mõeldud faili nimega GhostFile.exe kustutamiseks kataloogist C: Temp. Pärast faili kustutamist teatab kena sõnumikast kasutajale, et fail on kadunud:
Alammakro1()
Tapke "C: TempGhostFile.exe"
MsgBox "Fail on kustutatud."
Lõpeta alam
Kood töötab suurepäraselt, kui kustutatav fail on tõepoolest olemas. Aga kui mingil põhjusel faili nimega GhostFile.exe C:Temp-draivis ei eksisteeri, kuvatakse tõrge.
Sel juhul ei huvita teid, kui faili seal pole, sest kavatsesite selle ikkagi kustutada. Nii et saate tõrget lihtsalt ignoreerida ja koodiga edasi liikuda.
Kui kasutate avaldust On Error Resume Next, jookseb kood oma rada olenemata sellest, kas sihitud fail on olemas või mitte:
Alammakro1()
Vea korral Jätka järgmisena
Tapke "C: TempGhostFile.exe"
MsgBox "Fail on kustutatud."
Lõpeta alam
Viga GoTo 0 korral
Teatud veateadete kasutamisel võib osutuda vajalikuks VBA tõrkekontrolli käitumise lähtestamine. Et mõista, mida see tähendab, vaadake järgmist näidet.
Siin soovite esmalt kustutada faili nimega GhostFile.exe kataloogist C: Temp. Et vältida tõrkeid, mis võivad tuleneda asjaolust, et sihitud faili pole olemas, kasutage käsku On Error Resume Next. Pärast seda proovite teha kahtlast matemaatikat, jagades 100/Mike:
Alammakro1()
Vea korral Jätka järgmisena
Tapke "C: TempGhostFile.exe"
Vahemik ("A3"). Väärtus = 100 / "Mike"
Lõpeta alam
Selle koodilõigu käitamine peaks hägusa matemaatika tõttu tekitama vea, kuid seda ei juhtu. Miks? Kuna viimane juhis, mille koodile andsite, oli On Error Resume Next. Kõiki pärast seda rida ilmnenud tõrkeid ignoreeritakse.
Selle probleemi lahendamiseks saate tavapärase veakontrolli taastamiseks kasutada avaldust On Error GoTo 0:
Alammakro1()
Vea korral Jätka järgmisena
Tapke "C: TempGhostFile.exe"
Viga GoTo 0 korral
Vahemik ("A3"). Väärtus = 100 / "Mike"
Lõpeta alam
See kood ignoreerib vigu kuni avalduse On Error GoTo 0 ilmumiseni. Pärast seda avaldust naaseb kood tavapärasele veakontrollile ja käivitab udusest matemaatikast tuleneva eeldatava vea.