VBA dėl klaidos „GoTo“ Klaidų pareiškimų tipai VBA

„Excel VBA On Error GoTo“

Klaidos yra neatskiriama 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 mes turime nepaisyti klaidos, 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.

  1. Įvykus klaidai „Goto 0“
  2. On Error Goto (etiketė)
  3. 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?

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

Kaip sakoma pačiame teiginyje, „On Error Resume Next“ reiškia kiekvieną kartą, kai įvyksta klaida kode, „tęsti“ 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ė = "Testing Error" darbalapiai ("Ws 4"). Pasirinkite Range ("A1"). Vertė = "Testing Error" End Sub

Dabar savo darbaknygėje turiu žemiau pateiktus 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ą. Taip yra todėl, kad mūsų darbaknygėje nėra darbalapio pavadinimu „Ws 3“, todėl įvyko klaida.

Tokiais atvejais galime norėti nepaisyti klaidos ir atnaujinti kodo vykdymą kitoje eilutėje. Čia yra mūsų klaidų tvarkytuvas „On Error Resume Next“.

  • Viskas, ką mums reikia padaryti, tai makrokomandos pradžioje pridėti eilutę „On Error Resume Next“.

Dabar vykdykite šį kodą ir jame nebus rodomas klaidos pranešimas, nes kai tik kodas susiduria su klaida, jis nepaisys klaidos ir pereis prie kitos kodo eilutės.

# 2 - „GoTo 0“ klaida

Tai ne klaidų tvarkytuvas, o klaidos pranešimų įgalinimo priemonė, kai mes išjungėme klaidos pranešimą naudodami teiginį „On Error Resume Next“.

Kai 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 koks nors konkretus kodo rinkinys įmeta klaidą tame kodo bloke, tik mes turime nepaisyti klaidų kitose kodo dalyse. Nenorime ignoruoti klaidos.

  • Pažiūrėkite į žemiau esantį vaizdą, kaip naudoti teiginį „On Error GoTo 0“.

Taigi dabar klaidos bus ignoruojamos tol, kol kodas ras klaidos pranešimo įgalintoją „On Error GoTo 0“, kai ši kodo eilutė vėl grąžins makrokomandas į normalią būseną ir pradės 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 klavišą F8, kad įvykdytumėte pirmuosius 2 darbalapio kodus.

Dabar „makro“ ketina vykdyti trečiąjį darbalapio kodą, kurio nėra darbaknygėje, paspauskite klavišą F8 ir sužinokite, kas nutiks.

Kadangi žemiau esančioje kodo eilutėje makrokomandoje įvyko klaida, ji perėjo prie klaidų tvarkymo priemonės etiketės „ErrorMessage“, kuri buvo aprašyta sakinyje „On Error GoTo (Label)“.

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.

Įdomios straipsniai...