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

„Excel VBA“ apie klaidų išrašą

VBA On Error pareiškimas yra klaidų tvarkymo mechanizmo tipas, naudojamas nurodant kodą daryti ką, jei jis aptinka bet kokio tipo klaidą, 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. Negalite padaryti kodo 100% efektyviu. Net jei esate tikras dėl savo kodo vienaip ar kitaip, jis 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, koks klaidos kodas gali atsirasti, bet 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.

Pavyzdžiui, jei bandote ištrinti lapą, kurio nėra, tada akivaizdu, kad negalime vykdyti tos kodo eilutės.

Klaida yra trijų tipų, viena yra sukompiliuota klaida dėl nedeklaruotų kintamųjų. Antrasis yra duomenų įvedimo klaida dėl neteisingų koduotojo įrašų, o trečioji - vykdymo laiko klaida dėl VBA negali 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į „Dėl klaidos“.

Klaidų pareiškimų tipai

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

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

  1. „GoTo 0“ reiškia, kad visada, kai įvyksta vykdymo laiko klaida, „Excel“ arba VBA turėtų rodyti klaidos pranešimo laukelį, kuriame būtų nurodyta, kokio tipo klaidą ji patyrė. Kai tik VBA įvykdo kodą, ji išjungia visus klaidų tvarkytuvus tame kode esančiame bloke.
  2. „Resume Next“ reiškia, kai tik įvyksta klaida, šis teiginys nurodo „Excel“ nepaisyti tos klaidos ir pereiti prie (tęsti toliau) kitos kodo eilutės, nerodant jokių klaidų pranešimų. Tai nereiškia, kad ji ištaisys klaidą; veikiau, ji tiesiog nepaiso klaidos.
  3. „GoTo“ (etiketė) reiškia, kad kai VBA aptinka klaidą, eikite į priskirtą etiketę. Tai priverčia kodą pereiti prie konkrečios koduotojo pateiktos eilutės.

3 geriausi VBA klaidų tvarkymo būdai

# 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ą, jis 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 Dim as Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub

Dabar, jei vykdysiu šį kodą, jis neteiks klaidos pranešimų; veikiau jis vykdys kitą kodo eilutę, ty j = 20/2.

# 2 - „On 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“ skaičiavimas nėra tinkamas. Gausime 11 vykdymo laiko klaidą.

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

Kodas:

Sub OnError_Example1 () Dim i kaip sveikasis skaičius, j kaip sveikasis skaičius, k kaip sveikasis skaičius Įjungus klaidą, tęsti 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, jis praleis „I“ skaičiavimą ir atliks likusius du skaičiavimus, o rezultatas bus toks.

Dabar vietoje „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 KKapskaič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ę. Veikiau jis pereis prie mano įvesto etiketės pavadinimo, ty „KCalcualtion“. Čia ji 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 aš paleisiu šį kodą. Pranešimo laukelyje bus rodomi skaičiavimo rezultatai.

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

Mes einame 11; rezultatas, ty padalijimas pagal nulį.

Taip pat galime gauti klaidos aprašymą vietoj numerio. Mums tiesiog reikia pakeisti kodą. Žemiau yra kodas.

Kodas:

Klaida. Aprašymas

Tai parodys tokį aprašymą.

Ką reikia atsiminti

  • Įvedę „On Error Resume Next“ kodo pabaigoje 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į.

Įdomios straipsniai...