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

Sisällysluettelo

Excel VBA virheilmoituksessa

VBA On Error -lauseke on eräänlainen virheenkä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 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 olisit luottavainen koodissasi tavalla tai toisella, se saattaa 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ä ennakoi, 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 VBA: ssa lausunto kaikenlaisten virheiden käsittelemiseksi, 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, excelin tai VBA: n tulisi näyttää virheilmoitusruutu, jossa kerrotaan tavanomainen virhe. Heti kun VBA suorittaa koodin, se poistaa käytöstä 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 seuraavaan koodiriviin (jatkamaan seuraavaa) näyttämättä virheilmoituksia. Se ei tarkoita, että se korjaa virheen; pikemminkin se vain jättää virheen huomiotta.
  3. GoTo (tarra) tarkoittaa, että 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

# 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 kuten 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

Jos suoritan tämän koodin, se ei anna minulle virheilmoituksia; pikemminkin se suorittaa seuraavan koodirivin, ts. j = 20/2.

# 2 - On GoTo Label -virhe

Olen ilmoittanut kolme muuttujaa.

Koodi:

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

Määritän kaikille näille kolmelle muuttujalle 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 As Integer, j As Integer, k As Integer On Error Resume Next i = 20 / 0 j = 20 / 2 k = 10 / 5 MsgBox "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & k & vbNewLine End Sub

If I execute this, it will skip the “I” calculation and execute the remaining two calculations, and the result is as follows.

Now instead of “On Error Resume Next,” I will add “On Error GoTo KCalculation.”

Code:

Sub OnError_Example1() Dim i As Integer, j As Integer, k As Integer On Error GoTo KCalculation: i = 20 / 0 j = 20 / 2 KCalculation: k = 10 / 5 MsgBox "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & k & vbNewLine End Sub
Huomaa: Tässä ”KCalculation” on antamasi etiketin nimi; Voit antaa oman tarran nimen ilman välilyöntiä.

Jos suoritan tämän koodirivin, se ei siirry seuraavalle riville. Pikemminkin se siirtyy kirjoittamaani etiketin nimeen, ts. "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äinen viestiruutu näyttää laskentatulokset.

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

Menemme 11; seurauksena eli jakaminen nollalla.

Voimme myös saada virheen kuvauksen numeron sijaan. 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.

Mielenkiintoisia artikkeleita...