VBA virheilmoituksista | Kolme parasta tapaa käsitellä virheitä

Excel VBA virheilmoituksessa

VBA On Error -lauseke on eräänlainen virhekäsittelymekanismi, jota käytetään ohjaamaan koodia tekemään mitä jos se havaitsee minkä tahansa tyyppisen virheen, yleensä kun koodi havaitsee virheen, suoritus pysähtyy, mutta tämän lauseen kanssa koodissa suoritetaan koodi jatkuu samalla tavalla kuin se on asettanut ohjeet, kun se havaitsee virheen.

Koodivirheen ennakointi tekee sinusta ammattilaisen VBA-koodauksessa. Et voi tehdä koodista 100% tehokasta, vaikka olet luottavainen koodistasi tavalla tai toisella, se voi aiheuttaa virheen.

Kaikenlaisten virheiden tunnistaminen ja käsitteleminen on melkein mahdotonta, mutta meillä on erilaisia ​​tapoja käsitellä virheitä VBA: ssa. Koodia kirjoittaessasi et ehkä odota, millainen virhekoodi voi heittää, mutta jos virheitä tulee, vietät enemmän aikaa virheenkorjaukseen kuin itse koodin kirjoittamiseen.

Mikä on virhe?

Virhe ei ole muuta kuin koodiriviä ei voida suorittaa toiminnallisuuden tai väärän koodin takia. Joten yritä ennakoida virhe ja käsitellä sitä.

Esimerkiksi, jos yrität poistaa taulukon, jota ei ole, emme tietenkään voi suorittaa kyseistä koodiriviä.

Virhe on kolmen tyyppinen, yksi on koottu virhe johtuen ilmoittamattomista muuttujista. Toinen on kooderin virheellisten syötteiden aiheuttama tietojen syöttövirhe, ja kolmas on VBA: n aiheuttama ajoaikavirhe, joka ei tunnista koodiriviä. Jos haluat yrittää käyttää tai työskennellä laskentataulukossa tai työkirjassa, jota ei ole siellä.

Mutta meillä on lausunto VBA: ssa käsittelemään kaikenlaisia ​​virheitä, ts. ”On Error” -lauseke.

On-virhelausekkeiden tyypit

Keskeinen kohta virheiden käsittelyssä VBA: ssa on ”On Error” -lauseke. Esimerkiksi On Error -kohdassa "jatka seuraavaa riviä", "siirry tai siirry toiselle riville" jne.

On Error -lausekkeessa on kolme erilaista lausetta.

  1. GoTo 0 tarkoittaa aina, kun ajoaikavirhe  esiintyy, excel tai VBA: n pitäisi näyttää virheilmoitusruutu, jossa kerrotaan tavanomainen virhe. Heti kun VBA suorittaa koodin, se poistaa kaikki virheenkäsittelijät koodin kyseisessä lohkossa.
  2. Jatka seuraavaa tarkoittaa, että aina kun virhe ilmenee, tämä lauseke kehottaa Exceliä jättämään kyseisen virheen huomiotta ja siirtymään seuraavalle koodiriville (jatkamaan seuraavaa) näyttämättä virheilmoituksia. Se ei tarkoita, että se korjaa virheen, vaan vain jättää virheen huomiotta.
  3. GoTo [label] tarkoittaa aina, kun VBA havaitsee virheen, siirry määritettyyn tarraan. Tämä saa koodin siirtymään kooderin tarjoamalle tietylle riville.

Kolme parasta tapaa käsitellä virheitä VBA: ssa

Voit ladata tämän VBA On Error -mallin täältä - VBA On Error Template

# 1 - On Error Jatka Seuraava

Oletetaan, että jaat arvon 20 0: lla ja olet ilmoittanut muuttujan osoittamaan jakamisen tuloksen sille.

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna i = 20/0 End Sub 

Jos suoritat tämän koodin, se heittää alla olevan virheen.

Joten et voi jakaa mitään lukua nolla-arvolla. Suoritusajan virheluku on 11 eli jako nollalla.

Lisään nyt vielä yhden rivin koodiin.

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna, j kokonaislukuna i = 20/0 j = 20/2 End Sub 

Lisään nyt lauseen Virhe jatkuu seuraavaksi yläreunaan.

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna, j kokonaislukuna On Error Jatka Seuraava i = 20/0 j = 20/2 End Sub 

Nyt kun suoritan tämän koodin, se ei anna minulle virheilmoituksia, vaan se suorittaa seuraavan koodirivin eli j = 20/2.

# 2 - On GoTo Label -virhe

Olen ilmoittanut kolme muuttujaa.

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna, j kokonaislukuna, k kokonaislukuna 

Kaikille näille kolmelle muuttujalle osoitan jakolaskennan.

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna, j kokonaislukuna, k kokonaislukuna i = 20/0 j = 20/2 k = 10/5

Kaikkien näiden kolmen laskelman tulos näkyy viestikentässä.

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna, j kokonaislukuna, k kokonaislukuna i = 20/0 j = 20/2 k = 10/5 MsgBox "i: n arvo on" & i & vbNewLine & "j: n arvo on "& j & _ vbNewLine &" k: n arvo on "& k & vbNewLine End Sub 

Yritän nyt suorittaa tämän koodin, koska “I”: n laskeminen ei ole oikein, saamme ajoaikavirheen 11.

Lisään nyt ”On Error Resume Next” -ilmoituksen.

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna, j kokonaislukuna, k kokonaislukuna On Virhe jatkuu Seuraava i = 20/0 j = 20/2 k = 10/5 MsgBox "i: n arvo on" & i & vbNewLine & "The j: n arvo on "& j & _ vbNewLine &" k: n arvo on "& k & vbNewLine End Sub 

Jos suoritan tämän, se ohittaa “I” -laskennan ja suorittaa loput kaksi laskutoimitusta ja tulos on seuraava.

Nyt ”On Error Resume Next” -kohdan sijaan lisätään ”On Error GoTo KCalculation”

Koodi:

 Sub OnError_Example1 () Dim i kokonaislukuna, j kokonaislukuna, k kokonaislukuna On Error GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "i: n arvo on" & i & vbNewLine & "J: n arvo on" & j & _ vbNewLine & "k: n arvo on" & k & vbNewLine End Sub 

Huomaa: Tässä ”KCalculation” on antamasi tarran nimi, voit antaa oman tarran nimen ilman välilyöntiä.

Nyt kun suoritan tämän koodirivin, se ei siirry seuraavalle riville, vaan hyppää kirjoittamaani etiketin nimeen eli "KCalcualtion". Tässä se jättää huomiotta "I": n antaman virheen ja ei myöskään suorita "j" -laskentaa, mutta hyppää heti "KCalcualtion": iin.

# 3 - Tulosta virheluku VBA: ssa

Koodin lopussa voimme myös tulostaa virheen numeron erilliseen viestiruutuun. Seuraava koodirivi tekee tämän työn.

Koodi:

Virhe numero

Suoritan nyt tämän koodin ensimmäisen viestiruudun, joka näyttää laskentatulokset.

Napsauta OK, se näyttää vielä yhden viestiruudun, joka näyttää virheen numeron.

Menemme tuloksena 11 eli jakaminen nollalla.

Voimme myös saada virheen kuvauksen numeron sijasta. Meidän on vain vaihdettava koodi, alla on koodi.

Koodi:

Virhe Kuvaus

Se näyttää tällaisen kuvauksen.

Muistettavaa

  • Kun olet kirjoittanut koodin loppuun "On Error Resume Next", älä unohda lisätä lausetta On On GoTo 0
  • Tarran nimen tulisi olla sama molemmissa paikoissa.
  • Tarrojen nimiä ei tarvitse määritellä hyvissä ajoin.
  • Loppujen lopuksi, katso aina mikä virhe tapahtui erillisen viestiruudun kautta.

$config[zx-auto] not found$config[zx-overlay] not found