Exceli VBA veateate kohta
VBA On Error lause on teatud tüüpi veakäsitlusmehhanism, mida kasutatakse koodi suunamiseks tegema, mis siis, kui ilmneb mis tahes tüüpi viga, tavaliselt siis, kui kood tabab tõrke, mille käivitamine peatub, kuid selle väitega koodis käivitatakse kood kood jätkub, nagu tal on juhiste kogum, mida vea ilmnemisel teha.
Koodis oleva vea ennetamine muudab teid VBA kodeerimisel profiks. Te ei saa koodi 100% efektiivseks muuta. Isegi kui olete oma koodi suhtes ühel või teisel viisil kindel, võib see põhjustada vea.
Igasuguste vigade tuvastamine ja käsitlemine on peaaegu võimatu ülesanne, kuid meil on VBA-s vea käsitlemiseks erinevaid viise. Koodi kirjutamise ajal ei pruugi te aimata, millist tüüpi veakood võib välja visata, kuid kui mõni tõrge tuleb, kulutate silumisele rohkem aega kui koodi enda kirjutamine.
Mis on viga?
Viga pole midagi muud kui koodirida ei saa funktsionaalsuse või vale koodi tõttu käivitada. Nii et proovige viga ennetada ja sellega toime tulla.
Näiteks kui proovite kustutada lehte, mida seal pole, siis ilmselgelt ei saa me seda koodirida käivitada.
Viga on kolme tüüpi, üks on kompileeritud viga deklareerimata muutujate tõttu. Teine neist on andmesisestusviga, mis tuleneb kooderi valedest sisestustest, ja kolmas on VBA-st tingitud käitamisviga, mis ei suuda koodirida ära tunda. Töölehele või töövihikule juurdepääsu proovimiseks või selle töötamiseks, mida seal pole.
Kuid meil on VBA-s avaldus kõigi selliste vigade käsitlemiseks, st lause „On Error”.

Veateate olekute tüübid
VBA vigade käsitlemise põhipunkt on lause „On Error”. Näiteks vea korral „jätkake järgmist rida”, „minge teisele reale või hüpake teisele reale” jne.
On Error-avaldusel on sellele kolme tüüpi avaldusi.
- GoTo 0 tähendab, et alati, kui ilmneb tööaja tõrge, peaks excel või VBA kuvama tõrketeate kasti, milles öeldakse, millist viga ta on kohanud. Niipea, kui VBA koodi käivitab, keelab see koodi kõik selles konkreetses plokis olevad veakäitlejad.
- Jätka järgmine tähendab, et alati, kui tõrge ilmneb, käsib see lause Excelit seda viga ignoreerida ja liikuda järgmise koodirea juurde (jätkata järgmisele) ilma veateateid kuvamata. See ei tähenda, et see vea parandaks; pigem ignoreerib see viga.
- GoTo (silt) tähendab, et alati, kui VBA ilmneb veaga, minge määratud sildile. See paneb koodi hüppama kooderi antud konkreetsele reale.
3 parimat viisi vigade käsitlemiseks VBAs
# 1 - sisse lülitatud viga Jätka järgmist
Oletame, et jagate väärtuse 20 0-ga ja olete muutuja deklareerinud jagamise tulemuse määramiseks.
Kood:
Sub OnError_Example1 () Dim i täisarvuna i = 20/0 End Sub

Kui käivitate selle koodi, viskab see allpool oleva vea.

Nii et te ei saa ühtegi numbrit jagada nullväärtusega. Käitusaja vea number on 11, st jagamine nulliga.
Nüüd lisan koodile veel ühe rea.
Kood:
Sub OnError_Eexample1 () Dim i täisarvuna, j täisarvuna i = 20/0 j = 20/2 End Sub

Nüüd lisan ülaosas järgmise väljavõtte Vea jätkamine kohta.
Kood:
Sub OnError_Eexample1 () Dim i täisarvuna, j täisarvuna On viga jätkata Järgmine i = 20/0 j = 20/2 End Sub

Kui ma selle koodi käivitan, ei anna see mulle veateateid; pigem täidab see järgmise koodirea, st j = 20/2.
# 2 - GoTo sildi viga
Olen deklareerinud kolm muutujat.
Kood:
Sub OnError_Eexample1 () Dim i täisarvuna, j täisarvuna, k täisarvuna

Kõigi nende kolme muutuja jaoks määran jaotuse arvutamise.
Kood:
Alamviga_näide1 () Hämardage täisarv, j täisarv, k täisarvu i = 20/0 j = 20/2 k = 10/5

Kõigi nende kolme arvutuse tulemus kuvatakse sõnumikastis.
Kood:
Alamviga_näide1 () Dim i täisarvuna, j täisarvuna, k täisarvuna i = 20/0 j = 20/2 k = 10/5 MsgBox "i väärtus on" & i & vbNewLine & "j väärtus on "& j & _ vbNewLine &" k väärtus on "& k & vbNewLine End Sub

Nüüd proovin selle koodi käivitada, kuna “I” arvutamine pole õige. Saame jooksuaja vea 11.

Nüüd lisan lause „On Error Resume Next”.
Kood:
Sub OnError_Example1 () Dim i täisarvuna, j täisarvuna, k täisarvuna vea jätkuna Järgmine i = 20/0 j = 20/2 k = 10/5 MsgBox "i väärtus on" & i & vbNewLine & "The j väärtus on "& j & _ vbNewLine &" k väärtus on "& k & vbNewLine End Sub

Kui ma selle täidan, jätab see I-arvutuse vahele ja ülejäänud kaks arvutust ning tulemus on järgmine.

Nüüd lisan "On Error Resume Next" asemel "On Error GoTo KCalculation".
Kood:
Sub OnError_Example1 () Dim i täisarvuna, j täisarvuna, k täisarvuna Veana GoTo KKalkulatsioon: i = 20/0 j = 20/2 KKalkulatsioon: k = 10/5 MsgBox "i väärtus on" & "J väärtus on" & j & _ vbNewLine & "k väärtus on" & k & vbNewLine End Sub

Kui ma selle koodirea täidan, ei hüpata järgmisele reale. Pigem hüppab see minu sisestatud sildi nimele, st “KCalcualtion”. Siin ignoreeritakse „I” poolt antud viga ja ühtlasi ei teostata „j” arvutust, vaid hüpatakse kohe „KCalcualtion” -i.
# 3 - VBA printimisvea number
Koodi lõppu saame vea numbri printida ka eraldi teatekasti. Järgmine koodirida teeb selle töö.
Kood:
Viga. Number

Nüüd käivitan selle koodi, esimene teadete kast näitab arvutustulemusi.

Klõpsake nuppu OK. See näitab vea numbri kuvamiseks veel ühte sõnumikasti.

Me läheme 11; selle tulemusel, st jagamine nulliga.
Numbri asemel võime saada ka vea kirjelduse. Peame lihtsalt koodi muutma. Allpool on kood.
Kood:
Viga. Kirjeldus

See näitab sellist kirjeldust.

Asjad, mida meeles pidada
- Pärast koodi lõppu „On Error Resume Next” sisestamist ärge unustage lisada lauset „On Error GoTo 0.”
- Sildi nimi peaks olema mõlemas kohas sama.
- Siltide nimesid pole vaja aegsasti määratleda.
- Lõpuks vaadake alati, mis viga ilmnes, läbi eraldi sõnumikasti.