VBA apie klaidų pareiškimus 3 geriausi klaidų valdymo būdai

„Excel VBA“ apie klaidų pareiškimą

„VBA On Error“ pareiškimas yra klaidų tvarkymo mechanizmo tipas, naudojamas nurodant kodą daryti ką, jei jis susiduria su bet kokio tipo klaida, paprastai kai kodas susiduria su klaida, vykdymas sustoja, bet su šiuo sakiniu kode vykdoma kodas tęsiasi taip, kaip jis turi nurodymų, kuriuos turi atlikti, kai aptinka klaidą.

Numatydami klaidą kode, jūs esate profesionalus VBA kodavimas. Jūs negalite padaryti kodo 100% efektyviu, net jei esate tikras dėl savo kodo vienaip ar kitaip, tai gali sukelti klaidą.

Beveik neįmanoma užduotis nustatyti ir tvarkyti bet kokias klaidas, tačiau mes turime skirtingus būdus, kaip valdyti klaidas VBA. Rašydami kodą galite nenumatyti, kad klaidos kodas gali atsirasti, tačiau jei atsiras kokių nors klaidų, sugaišite daugiau laiko derindami nei rašydami patį kodą.

Kas yra klaida?

Klaida yra ne kas kita, o kodo eilutės negalima vykdyti dėl funkcionalumo ar netinkamo kodo. Taigi pabandykite numatyti klaidą ir ją pašalinti.

Pvz., Jei bandote ištrinti lapą, kurio nėra, akivaizdu, kad negalime vykdyti tos kodo eilutės.

Klaida yra trijų tipų, viena yra sukompiliuota klaida dėl nedeklaruotų kintamųjų. Antroji yra duomenų įvedimo klaida dėl neteisingų koduotojo įrašų, o trečioji yra vykdymo laiko klaida dėl VBA, kurios negalima atpažinti kodo eilutės. Už bandymą pasiekti ar dirbti su darbalapiu ar darbaknygė, kurios nėra.

Bet mes turime VBA pareiškimą, kad galėtume tvarkyti visas šias klaidas, ty teiginį „On Error“.

Klaidų pareiškimų tipai

Pagrindinis klaidų tvarkymo taškas VBA yra sakinys „On Error“. Pvz., Esant klaidai „atnaujinti kitą eilutę“, „pereiti prie kitos eilutės ar pereiti prie jos“ ir kt.

„On Error“ pareiškime yra trijų rūšių teiginiai.

  1. „GoTo 0“  reiškia, kad, kai įvyksta vykdymo laiko klaida, „Excel“ arba VBA turėtų rodyti klaidos pranešimo laukelį, kuriame būtų nurodyta klaidos rūšis. Kai tik VBA įvykdys kodą, ji išjungs visus klaidų tvarkytuvus tame kodo bloke.
  2. „Resume Next“ reiškia, kai tik įvyksta klaida, šis teiginys nurodo „Excel“ nepaisyti tos klaidos ir pereiti prie (atnaujinti kitą) eilutę kodo, nerodant jokių klaidų pranešimų. Tai nereiškia, kad ji ištaisys klaidą, o tiesiog ignoruoja klaidą.
  3. „GoTo“ [etiketė] reiškia, kai VBA pastebi klaidą, eikite į priskirtą etiketę. Tai priverčia kodą pereiti prie konkrečios koduotojo pateiktos eilutės.

3 geriausi VBA klaidų tvarkymo būdai

Šį „VBA On Error Template“ galite atsisiųsti čia - „VBA On Error Template“

# 1 - įjungus klaidą, tęsti toliau

Tarkime, kad dalijat 20 reikšmę iš 0 ir deklaravote kintamąjį, kad priskirtumėte dalijimo rezultatą.

Kodas:

 Sub OnError_Example1 () Dim i kaip sveikasis skaičius i = 20/0 End Sub 

Jei paleisite šį kodą, tai sukels žemiau pateiktą klaidą.

Taigi negalima padalyti jokio skaičiaus iš nulinės vertės. Vykdymo laiko klaidos numeris yra 11, ty padalijimas iš nulio.

Dabar prie kodo pridėsiu dar vieną eilutę.

Kodas:

 Sub OnError_Example1 () Dim i kaip sveikasis skaičius, j kaip sveikasis skaičius i = 20/0 j = 20/2 End Sub 

Dabar viršuje pridėsiu teiginį apie klaidos atnaujinimą.

Kodas:

 Sub OnError_Example1 () Dim i as Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Dabar, jei vykdysiu šį kodą, jis neduos jokių klaidų pranešimų, o vykdys kitą kodo eilutę, ty j = 20/2.

2 - „GoTo Label“ klaida

Aš paskelbiau tris kintamuosius.

Kodas:

 Sub OnError_Example1 () Dim i kaip sveikas skaičius, j kaip sveikas skaičius, k kaip sveikas skaičius 

Visiems šiems trims kintamiesiems priskirsiu padalijimo skaičiavimą.

Kodas:

 Sub OnError_Example1 () Dim i kaip sveikas skaičius, j kaip sveikas skaičius, k kaip sveikas skaičius i = 20/0 j = 20/2 k = 10/5

Visų šių trijų skaičiavimų rezultatas bus rodomas pranešimo laukelyje.

Kodas:

 Sub OnError_Example1 () Dim i kaip sveikasis skaičius, j kaip sveikasis skaičius, k kaip sveikasis skaičius i = 20/0 j = 20/2 k = 10/5 MsgBox "i reikšmė yra" & i & vbNewLine & "j reikšmė yra "& j & _ vbNewLine &" k reikšmė yra "& k & vbNewLine End Sub 

Dabar bandysiu įvykdyti šį kodą, nes „I“ apskaičiavimas nėra tinkamas, gausime 11 vykdymo laiko klaidą.

Dabar pridėsiu teiginį „On Error Resume Next“.

Kodas:

 Sub OnError_Example1 () Dim i kaip sveikas skaičius, j kaip sveikas skaičius, k kaip sveikas skaičius Įjungta klaida Atnaujinti Kitas i = 20/0 j = 20/2 k = 10/5 MsgBox "i reikšmė yra" & i & vbNewLine & "The j vertė yra "& j & _ vbNewLine &" k vertė yra "& k & vbNewLine End Sub 

Jei tai įvykdysiu, praleisiu „I“ skaičiavimą ir atliksiu likusius du skaičiavimus, o rezultatas bus toks.

Dabar vietoj „On Error Resume Next“ pridėsiu „On Error GoTo KCalculation“

Kodas:

 Sub OnError_Example1 () Dim i kaip sveikasis skaičius, j kaip sveikasis skaičius, k kaip sveikasis skaičius Klaida GoTo KSkaičiavimas: i = 20/0 j = 20/2 KSkaičiavimas: k = 10/5 MsgBox "i reikšmė yra" & i & vbNewLine & "J vertė yra" & j & _ vbNewLine & "k reikšmė yra" & k & vbNewLine End Sub 

Pastaba: Čia „KCalculation“ yra mano suteiktas etiketės pavadinimas. Galite nurodyti savo etiketės pavadinimą be tarpo.

Dabar, jei vykdysiu šią kodo eilutę, ji neperšoks į kitą eilutę, o pereis prie mano įvesto etiketės pavadinimo, ty „KCalcualtion“. Čia jis nepaisys „I“ pateiktos klaidos ir neatliks „j“ skaičiavimo, bet iškart pereis prie „KCalcualtion“.

# 3 - spausdinimo klaidos numeris VBA

Kodo pabaigoje mes taip pat galime atspausdinti klaidos numerį atskirame pranešimų laukelyje. Ši kodo eilutė atliks šį darbą.

Kodas:

Klaida. Skaičius

Dabar paleisiu šį kodą, pirmame pranešimo laukelyje bus rodomi skaičiavimo rezultatai.

Spustelėkite Gerai, jis parodys dar vieną pranešimų laukelį, kuriame bus rodomas klaidos numeris.

Rezultatas yra 11, ty padalijimas pagal nulį.

Taip pat galime gauti klaidos aprašymą vietoj numerio. Mes tiesiog turime pakeisti kodą, žemiau yra kodas.

Kodas:

Klaida. Aprašymas

Tai parodys tokį aprašymą.

Ką reikia atsiminti

  • Kodo pabaigoje įvedę „On Error Resume Next“ nepamirškite pridėti teiginio „On Error GoTo 0“
  • Etiketės pavadinimas abiejose vietose turėtų būti vienodas.
  • Etikečių pavadinimų nereikia apibrėžti iš anksto.
  • Galų gale visada peržiūrėkite, kokia klaida įvyko, per atskirą pranešimų laukelį.

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