VBA dėl klaidos „GoTo“ Klaidų pareiškimų tipai VBA
„Excel VBA On Error GoTo“
Klaidos yra neatsiejama bet kurios kodavimo kalbos dalis, o VBA makrokomandos niekuo nesiskiria. Mano nuomone, rasti klaidos priežastis yra 90% atlikto darbo, o 10% - tai, kaip tą klaidą ištaisyti. Kiekvienoje kodavimo kalboje koduotojai naudoja savo būdą, kaip tvarkyti klaidas koduodami, todėl ir mes naudojame VBA kodavimą. Dažnai mums reikia ignoruoti klaidą arba dažnai mes galime norėti pereiti prie konkrečių dalykų, kai įvyksta klaida. „Apie klaidą“ yra teiginys, kurį turime naudoti VBA, kad galėtume tvarkyti klaidas.
Šis teiginys turi trijų tipų teiginius, o toliau pateikiamas sąrašas.
- Įvykus klaidai „Goto 0“
- Įvykus klaidai pereiti [etiketė]
- On Error Resume Next
Šiame straipsnyje mes pamatysime, kaip šie trys teiginiai naudojami VBA koduojant bet kokioms klaidoms tvarkyti.
Kaip naudoti VBA klaidų pareiškimuose?
Šį „VBA On Error GoTo“ pareiškimo šabloną galite atsisiųsti čia - „VBA On Error GoTo“ pareiškimo šablonas# 1 - įjungus klaidą, tęsti toliau
Kaip sakoma pačiame sakinyje „On Error Resume Next“ reiškia, kai kode įvyksta klaida, „atnaujinti“ kitą kodo eilutę, ignoruojant klaidos eilutės kodą. Dabar pažvelkite į žemiau esantį kodą.
Žemiau esančiame kode paminėjau darbalapių pavadinimus ir paprašiau įvesti vertę į pirmąjį langelį kaip „Klaidų testavimas“.
Kodas:
Sub On_Error_Resume_Next () darbalapiai ("Ws 1"). Pasirinkite diapazoną ("A1"). Reikšmė = "Testuojant klaidą" darbalapiai ("Ws 2"). Pasirinkite diapazoną ("A1"). Reikšmė = "Error Testing" darbalapiai ( "Ws 3"). Pasirinkite diapazoną ("A1"). Reikšmė = "Testuojant klaidą" darbalapiai ("Ws 4"). Pasirinkite diapazoną ("A1"). Reikšmė = "Testuojant klaidą" pabaigos antrinė dalis
Dabar savo darbaknygėje turiu žemiau esančius darbalapius.
- Paleisiu kodą ir pažiūrėsiu, kas bus.
- Gavome klaidą „Subscript Out of Range“, spustelėkite „Debug“, kad pamatytumėte, kurioje eilutėje gavome klaidą.
- Taigi eilutėje „Darbalapiai („ Ws 3 “). Pasirinkite“ gavome klaidą, nes mūsų darbaknygėje nėra darbalapio, pavadinto „Ws 3“, todėl įvyko klaida.
Tokiais atvejais galime norėti nepaisyti klaidos ir atnaujinti kodo vykdymą kitoje eilutėje, čia patenka į mūsų klaidos tvarkytuvę „On Error Resume Next“.
- Viskas, ką mums reikia padaryti, tai makrokomandos pradžioje pridėti eilutę „On Error Resume Next“.
Dabar vykdykite šį kodą ir jis nerodys jokio klaidos pranešimo, nes kai tik kodas susiduria su klaida, jis nepaisys klaidos ir grįš į kitą kodo eilutę.
# 2 - „GoTo 0“ klaida
Tai nėra klaidų tvarkytuvas, o klaidų pranešimų įgalinimo priemonė, kai mes išjungėme klaidos pranešimą naudodami teiginį „On Error Resume Next“.
Tas, kurį naudojate teiginį „Tęsti toliau“, VBA makrokomandos pradeda ignoruoti bet kokias klaidas, kurios atsiranda, ir tęsia kitą kodų eilutę. Bet mes nenorime, kad tai atsitiktų nuolat, nes kai kurias klaidas turime tyčia ignoruoti, o mums reikia pranešimo.
Jei bet kuris konkretus kodo rinkinys įmeta klaidą tame kodo bloke, turime ignoruoti klaidą kitose kodo dalyse, kurios nenorime ignoruoti.
- Pažiūrėkite į žemiau esantį vaizdą, kaip naudoti teiginį „On Error GoTo 0“.
Taigi dabar klaidos bus ignoruojamos, kol kodas neras klaidos pranešimo įgalinimo priemonės „On Error GoTo 0“. Kai ši kodo eilutė atkuria makrokomandas ir pradeda mesti klaidų pranešimus, kaip įprasta.
# 3 - „GoTo Label“ klaida
Mes matėme, kaip ignoruoti klaidą ir kaip įgalinti pranešimą apie klaidą. Dabar naudodami šį metodą galime pereiti prie konkrečios kodo eilutės.
Taikant šį metodą „Etiketė“ reiškia, kad šiai etiketei galime suteikti bet kokį pavadinimą, o ta pati etiketė taip pat turėtų būti nurodyta reikalingoje kodo eilutėje.
Pavyzdžiui, pažiūrėkite į tą patį kodą iš aukščiau pateikto pavyzdžio.
Dabar vykdykime kodo eilutę eilute paspausdami F8 funkcinį klavišą.
Dabar makrokomanda skaitys klaidų tvarkytuvo pareiškimą, paspauskite F8 klavišą, kad įvykdytumėte pirmuosius 2 darbalapio kodus.
Dabar makrokomanda ketina vykdyti trečiąjį darbalapio kodą, kurio nėra darbaknygėje, paspauskite klavišą F8 ir sužinokite, kas nutiks.
Kadangi makrokomandoje įvyko klaida žemiau esančioje kodo eilutėje, ji peršoko į klaidų tvarkymo priemonės etiketę „ErrorMessage“, kuri buvo aprašyta per „On Error GoTo [Label]“ sakinį.
Dabar pranešimų laukelyje pranešimas bus rodomas kaip „Įvyko klaida ir išeinant iš makrokomandos“.
Ką reikia atsiminti
- „VBA On Error“ „GoTo 0“ dar kartą įgalins pranešimą apie klaidą, todėl nepamirškite to pridėti pateikę klaidų tvarkytuvą.
- Turite būti visiškai tikri, kurioje kodo dalyje norite nepaisyti klaidos, todėl pridėkite klaidų tvarkytuvą tik tam kodo blokui.