VBA klaidų tvarkymas | Klaidų tvarkymo „Excel VBA“ vadovas

„Excel VBA“ klaidų tvarkymas

VBA dirbdami su kodais galime susidurti su daugybe skirtingų tipų klaidų ir tai, kaip pašalinti šias klaidas, vadinama klaidų tvarkymu, dabar gali būti keletas klaidų, padarytų sintaksėje, kuri pati „Excel“ ją pabrėžia, bet kai yra klaida kuris nepatenka į diapazoną arba kažkas, ko nėra, „Excel“ suteikia mums tą patį iššokantį langą, svarbu žinoti, kuris klaidos kodas yra kokia klaida, kad būtų galima nustatyti kodo klaidą.

„Excel VBA“ vykdydami bet kokį kodų rinkinį gauname tam tikrų klaidų. Kai kurios iš šių klaidų yra sintaksės klaidos, kai kurios yra nevykdomos. Sintaksės klaida yra tada, kai vartotojas padarė raudoną spalvą pats „Excel“. Bet kai yra kitokia vykdymo laiko klaida, kaip mes tai padarysime ir kaip mes tai viršysime, tai mes aptarsime šiame straipsnyje.

Be sintaksės klaidų, kitas vykdymo laiko klaidas reikia tvarkyti vykdant bet kokį kodų rinkinį. Pirmiausia leiskite pateikti pavyzdį, kaip įvyksta kita vykdymo laiko klaida. Pažvelkite į žemiau pateiktą kodą,

Tai yra kodo pavyzdys, kai vykdoma grąžins tai, kas parašyta msgbox funkcijoje. Bet kaip matome, kad antroje kodo eilutėje yra 4/0, kuri matematiškai neįmanoma, todėl ji grąžins vykdymo laiko klaidą. Vykdykime minėtą kodą ir pamatysime klaidą, kurią gausime.

Tai klaida, kurią gauname vykdydami nurodytą kodą. Dabar, kaip elgtis su šia klaida, atlieka klaidų tvarkymas.

Yra du klaidų valdymo būdai:

  1. Apie klaidą Goto ir
  2. On Error Resume Next.

Paaiškinimas

Kaip paaiškinta aukščiau, VBA gauname daug tipų klaidų, kai kurios yra sintaksė, o kai kurios - vykdymo laikas. Sintaksės klaidos jau paryškintos raudona spalva, pavyzdžiui, žr. Toliau pateiktą ekrano kopiją,

Nors kita yra vykdymo laiko klaidos. Iš esmės „Excel“ atliks šiuos tris dalykus: arba parodys klaidą, arba ignoruos tą klaidą, arba parodys tam tikrą instrukcijų rinkinį. Norėdami atlikti tokias užduotis, turime duoti instrukcijas ir tai vadinama klaidų tvarkymu.

Kaip tvarkyti klaidas VBA kode?

Šią VBA klaidų tvarkymo „Excel“ šabloną galite atsisiųsti čia - VBA klaidų tvarkymo „Excel“ šablone

1 pavyzdys

Pirmajam pavyzdžiui paimkime pirmąjį kodą, kurį paėmėme kaip demonstraciją. Ankstesniame pavyzdyje matėme, kad kodas suteikia vykdymo laiko klaidą antroje „msgbox“ funkcijoje.

Atidarę subfunkciją, parašykite šį kodą,

Kodas:

 Antrinis pavyzdys () įjungus klaidą, tęsti kitą „MsgBox 4/2“ „MsgBox 4/0“ 

Dabar, kai vykdome aukščiau esantį kodą, matome, kad kodo eilutė, kurioje yra klaida, nėra vykdoma. „Excel“ praleidžia tą eilutę ir tęsiasi kitoje eilutėje.

Yra dar vienas būdas, kaip pašalinti klaidą, yra „vba Goto“ pareiškimas, mes pateikiame „Excel“ tikslą, į kurį reikia kreiptis radus klaidą. Vietoj ankstesnio klaidų tvarkymo kodo įterpėme ir užrašėme šį kodą,

Kodas:

 Antrinis pavyzdys () „GoTo“ klaida „MsgBox 4/2 MsgBox 4/0„ MsgBox 4/1 End Sub “ 

Pateikiame „Excel Az“ kaip tikslą, į kurį reikia kreiptis, jei jis randa klaidą. Dabar po „msgbox“ parašykite kitą kodą, kaip nurodyta toliau,

Kodas:

 Antrinis pavyzdys () Įvykus „GoTo“ klaidai „MsgBox 4/2“ „MsgBox 4/0“ „MsgBox 4/1“ atlikta: išeikite iš antrinio 

Dabar mes turime apibrėžti paskirties vietą az kaip tai, ką ji turėtų daryti, kai „Excel“ nustato kodo klaidą.

Kodas:

 Antrinis pavyzdys () Dėl klaidos „GoTo az MsgBox 4/2 MsgBox 4/0 MsgBox 4/1 Atlikta: Išeikite iš sub az: MsgBox„ Tai klaida “ir klaida. 

Dabar, kai paleidžiame šį kodą, matome rodomą rezultatą.

Tai pirmas „msg“ laukelio rezultatas ir kadangi žinome, kad kitoje kodo eilutėje turime klaidą, pažiūrėkime, ką duos „Excel“.

Aukščiau pateiktas klaidos aprašymas kode padeda mums tiksliai parodyti, kokia klaida įvyko mūsų kode.

2 pavyzdys

Mes išmokome tvarkyti klaidas savo koduose. Pažvelkime į kitą klaidų tvarkymo pavyzdį. Apsvarstykite šį kodą kaip antrąjį pavyzdį.

Mes turime šiek tiek panašią klaidą iš 1 pavyzdžio. Klaida yra d = i / b eilutėje. Dabar šias klaidas spręsime naudodami du aukščiau paaiškintus metodus.

Atidarę subfunkciją, parašykite šį kodą,

Kodas:

 2 antrasis pavyzdys () Įjungus klaidą, tęsti kitą bx Dim i kaip sveikąjį skaičių, b kaip sveikąjį skaičių, c kaip sveikąjį skaičių, d kaip sveikąjį skaičių i = 2 b = 0 c = i + b MsgBox cd = i / b MsgBox d End Sub 

Dabar, kai vykdome kodą, galime pamatyti, kad jis nepaiso antrosios eilutės ir tiesiog parodo C vertę.

Pirmiau pateiktas klaidų tvarkytuvas buvo atnaujintas toliau, dabar mes naudosime „Go to“, kur mes pasakysime „Excel“ paskirties vietą, kuriai eiti, kai ji susiduria su klaida. Užrašykite šį kodą,

Kodas:

 2 pakopos pavyzdys () Dėl klaidos GoTo bx Dim i kaip sveikas skaičius, b kaip sveikas skaičius, c kaip sveikas skaičius, d kaip sveikas skaičius i = 2 b = 0 c = i + b MsgBox cd = i / b MsgBox d

„Bx“ yra paskirties vieta, pateikiama, kai įvyksta klaida, kai „msgbox D“ užrašo šį kodą,

Kodas:

 2 antrasis pavyzdys () Dėl klaidos „GoTo bx Dim i“ kaip sveikasis skaičius, b kaip sveikas skaičius, c kaip sveikas skaičius, d kaip sveikas skaičius i = 2 b = 0 c = i + b MsgBox cd = i / b MsgBox d DOne: išeiti iš antrinio 

Dabar turime apibrėžti paskirties vietą Bx, ką jis turėtų padaryti, kai jis susiduria su klaida. Taigi užrašykite šį kodą,

Kodas:

 2 antrasis pavyzdys () Dėl klaidos „GoTo bx Dim i“ kaip sveikasis skaičius, b kaip sveikas skaičius, c kaip sveikas skaičius, d kaip sveikas skaičius i = 2 b = 0 c = i + b MsgBox cd = i / b MsgBox d DOne: Išeikite iš sub bx: MsgBox „Tai dar viena klaida“ ir klaidos aprašo pabaigos antrinis 

Dabar, kai vykdome kodą, galime pamatyti, kad „Excel“ pirmiausia suteikia mums C vertę.

Dabar atlikdami kitą veiksmą, jis suteiks mums greitą pranešimą, kurį pateikėme, kai aptiko klaidą.

Taip mes tvarkome įprastas „Excel VBA“ vykdymo laiko klaidas.

Ką reikia atsiminti

Yra keli dalykai, kuriuos turime atsiminti apie klaidų tvarkymą:

  1. On Error Resume Next Nepaiso klaidos.
  2. Įjungus klaidą „GoTo Gives“ išskiria tikslą, kai aptinka klaidą.
  3. Aprašymas naudojamas tiksliai parodant vartotojui įvykusią klaidą.

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