VBA On Error - Napake pri ravnanju z najboljšimi praksami

Geslo za napake VBA

Napake

OpisKoda VBANapaka pri vklopu - koda zaustavitve in napaka na zaslonuPri napaki Pojdi na 0Napaka pri vklopu - preskočite napako in nadaljujte z izvajanjemOn Napaka Nadaljuj NaprejNapaka pri vklopu - pojdite na vrstico kode [Oznaka]Pri napaki Pojdi na [Oznaka]Počisti (ponastavi) napakoNapaka GoTo -1Pokaži številko napakeMsgBox Err.ŠtevilkaPokaži opis napakeMsgBox Err. OpisFunkcija ustvarjanja lastne napakeNapaka Dvig

Oglejte si več VBA "Cheat Sheets" in brezplačne prenose PDF

Obravnavanje napak VBA

Obravnavanje napak VBA se nanaša na postopek predvidevanja, odkrivanja in reševanja napak v času izvajanja VBA. Postopek obravnave napak VBA se pojavi pri pisanju kode, preden se dejansko pojavijo napake.

Napake v času izvajanja VBA so napake, ki se pojavijo med izvajanjem kode. Primeri napak pri izvajanju so:

  • Sklicevanje na neobstoječi delovni zvezek, delovni list ali drug predmet
  • Neveljavni podatki, npr. sklicevanje na celico Excel, ki vsebuje napako
  • Poskus deljenja z ničlo

VBA o izjavi o napaki

Večina napak VBA se obravnava z O izjavi o napaki. Izjava On Error pove VBA, kaj naj stori, če naleti na napako. Tam so drevesa O izjavah o napakah:

  • Pri napaki Pojdi na 0
  • On Napaka Nadaljuj Naprej
  • Napaka GoTo Linija

Pri napaki Pojdi na 0

Pri napaki Pojdi na 0 je privzeta nastavitev VBA. To privzeto nastavitev lahko obnovite tako, da dodate naslednjo vrstico kode:

1 Pri napaki Pojdi na 0

Ko pride do napake pri Pri napaki Pojdi na 0, VBA preneha izvajati kodo in prikaže standardno polje s sporočilom o napaki.

Pogosto boste dodali Pri napaki Pojdi na 0 po dodajanju On Napaka Nadaljuj Naprej obravnavanje napak (naslednji razdelek):

123456789 Sub ErrorGoTo0 ()On Napaka Nadaljuj NaprejActiveSheet.Shapes ("Start_Button"). IzbrišiPri napaki Pojdi na 0'Zaženi več kodeEnd Sub

On Napaka Nadaljuj Naprej

On Napaka Nadaljuj Naprej pove VBA, naj preskoči vse vrstice kode, ki vsebujejo napake, in nadaljuje z naslednjo vrstico.

1 On Napaka Nadaljuj Naprej

Opomba: On Napaka Nadaljuj Naprej ne odpravi napake ali je kako drugače odpravi. VBA preprosto pove, naj nadaljuje, kot da vrstica kode, ki vsebuje napako, ne obstaja. Nepravilna uporaba On Napaka Nadaljuj Naprej lahko povzroči nenamerne posledice.

Odličen čas za uporabo On Napaka Nadaljuj Naprej je pri delu s predmeti, ki lahko obstajajo ali pa tudi ne. Na primer, želite napisati kodo, ki bo izbrisala obliko, če pa kodo zaženete, ko je oblika že izbrisana, bo VBA vrgel napako. Namesto tega lahko uporabite On Napaka Nadaljuj Naprej povedati VBA, naj izbriše obliko, če obstaja.

123 On Napaka Nadaljuj NaprejActiveSheet.Shapes ("Start_Button"). IzbrišiPri napaki Pojdi na 0

Opomba, ki smo jo dodali Pri napaki Pojdi na 0 za vrstico kode, ki vsebuje potencialno napako. To ponastavi obravnavo napak.

V naslednjem razdelku vam bomo pokazali, kako preizkusiti, ali je prišlo do napake Err.Številka, ki vam ponuja naprednejše možnosti za odpravljanje napak …

Err.Number, Err.Clear in Catching Errors

Namesto da preprosto preskočimo vrstico, ki vsebuje napako, lahko napako ujamemo z uporabo On Napaka Nadaljuj Naprej in Err.Številka.

Err.Številka vrne številko napake, ki ustreza vrsti zaznane napake. Če ni napake, Err.Številka = 0.

Na primer, ta postopek bo vrnil "11", ker je napaka, ki se pojavi Napaka med izvajanjem '11'.

1234567 Sub ErrorNumber_ex ()On Napaka Nadaljuj NaprejActiveCell.Value = 2 /0MsgBox Err.ŠtevilkaEnd Sub

Obravnavanje napak z Err.Number

Resnična moč Err.Številka je v sposobnosti zaznavanja napake (Err.Številka 0). V spodnjem primeru smo ustvarili funkcijo, ki bo s pomočjo Err.Number preverila, ali list obstaja.

12345678910111213141516171819 Sub TestWS ()MsgBox Ali WSExist ("test")End SubFunkcija Ali WSE obstaja (wsName As String) kot BooleanZatemni kot delovni listOn Napaka Nadaljuj NaprejNastavi ws = Preglednice (wsName)'Če napaka WS ne obstajaČe Err.Številka 0 PotemAliWSExist = FalseSicer paAliWSExist = ResKonec ČeNapaka GoTo -1Končana funkcija

Opomba: Dodali smo a Napaka GoTo -1 do konca, ki ponastavi številko Err.Number na 0 (glej dva odseka navzdol).

Z On Napaka Nadaljuj Naprej in Err.Številka, lahko podvojite »Poskusi« in »Ulovi« funkcionalnost drugih programskih jezikov.

Napaka GoTo Linija

Napaka GoTo Linija pove VBA, naj "odide" na označeno vrstico kode, ko pride do napake. Izjavo Pojdi na razglasite tako (kjer je errHandler oznaka vrstice, na katero morate iti):

1 Na Napaka Pojdi na errHandler

in ustvarite oznako vrstice, kot je ta:

1 errHandler:

Opomba: To je ista oznaka, ki bi jo uporabili z običajno izjavo VBA GoTo.

Spodaj bomo pokazali uporabo Napaka GoTo Linija za izhod iz postopka.

On Error Exit Sub

Če se pojavi napaka, lahko uporabite On Error GoTo Line za izhod iz podrejenega elementa.

To lahko storite tako, da oznako vrstice upravljalca napak postavite na konec postopka:

12345678 Sub ErrGoToEnd ()Napaka Pojdi na endProc"Nekaj ​​kodeksaendProc:End Sub

ali z uporabo ukaza Exit Sub:

123456789101112131415 Sub ErrGoToEnd ()Napaka Pojdi na endProc"Nekaj ​​kodeksaPojdi preskočiti IzhodendProc:Zapri podskipExit:'Še nekaj kodeEnd Sub

Err.Clear, On Error GoTo -1 in Resetting Err.Number

Ko odpravite napako, jo morate na splošno počistiti, da preprečite prihodnje težave pri obravnavi napak.

Ko pride do napake, oboje Napaka Jasno in Napaka GoTo -1 lahko uporabite za ponastavitev Err.Številka do 0. Je pa ena zelo pomembna razlika: Napaka Jasno ne ponastavi same napake, samo ponastavi Err.Številka.

Kaj to pomeni? UporabaNapaka Jasno, nastavitev obravnavanja napak ne boste mogli spremeniti. Če želite videti razliko, preizkusite to kodo in jo zamenjajte Napaka GoTo -1 z Napaka Jasno:

123456789101112131415161718192021 Sub ErrExamples ()Pri napaki Pojdi na errHandler:Napaka »Aplikacija določena«Napaka (13)Zapri poderrHandler:'Clear ErrorNapaka GoTo -1Pri napaki Pojdi na errHandler2:Napaka "Neujemanje vrste"Napaka (1034)Zapri poderrHandler2:Debug.Print Err. OpisEnd Sub

Običajno priporočam, da vedno uporabite Napaka GoTo -1, razen če imate dober razlog za uporabo Napaka Jasno namesto tega.

VBA pri napaki MsgBox

Morda boste želeli prikazati tudi sporočilo o napaki. Ta primer bo prikazal različna polja s sporočili, odvisno od tega, kje se pojavi napaka:

12345678910111213141516171819202122232425262728 Sub ErrorMessageEx ()Zatemni errMsg kot nizNa Napaka Pojdi na errHandler'Faza 1errMsg = "Napaka med fazo kopiranja in lepljenja."'Err.Rasise (11)'Faza 2errMsg = "Med fazo preverjanja podatkov je prišlo do napake."'Err.Rasise (11)'Faza 3errMsg = "Prišlo je do napake med fazo P & L-Building in Copy-Over."Napaka dviga (11)"Faza 4errMsg = "Pri poskusu beleženja uvoza na strani za nastavitev je prišlo do napake."'Err.Rasise (11)Pojdi na endProcerrHandler:MsgBox errMsgendProc:End Sub

Tu bi zamenjali Err.Raise (11) z vašo dejansko kodo.

Napaka VBA IsError

Drug način za odpravljanje napak je, da jih preizkusite s funkcijo VBA IsError. Funkcija IsError preizkusi napake pri izrazu in vrne TRUE ali FALSE, če pride do napake.

123 Sub IsErrorEx ()MsgBox IsErrror (obseg ("a7"). Vrednost)End Sub

Če je napaka VBA

Napake v VBA lahko odpravite tudi s funkcijo Excel IfError. Do funkcije IfError morate dostopati s pomočjo Delovni list Funkcijski razred:

1234567 Sub IfErrorEx ()Dim n As Longn = Funkcija delovnega lista.IfError (obseg ("a10"). Vrednost, 0)MsgBox nEnd Sub

To bo prikazalo vrednost območja A10, če je vrednost napaka, bo namesto tega prikazalo 0.

Vrste napak VBA

Napake med izvajanjem

Kot je navedeno zgoraj:

Napake v času izvajanja VBA so napake, ki se pojavijo med izvajanjem kode. Primeri napak pri izvajanju so:

  • Sklicevanje na neobstoječi delovni zvezek, delovni list ali drug predmet
  • Neveljavni podatki, npr. sklicevanje na celico Excel, ki vsebuje napako
  • Poskus deljenja z ničlo

Napake med izvajanjem lahko "odpravite z napakami" z uporabo zgoraj opisanih metod.

Napake v sintaksi

Napake v sintaksi VBA so napake pri pisanju kode. Primeri sintaktičnih napak vključujejo:

  • Napačno črkovanje
  • Manjkajoča ali nepravilna ločila

Urejevalnik VBA prepozna številne sintaktične napake z rdečo oznako:

Urejevalnik VBA ima tudi možnost »Samodejno preverjanje skladnje«:

Ko je to potrjeno, bo urejevalnik VBA ustvaril okno s sporočilom, ki vas bo opozorilo na sintaktične napake, potem ko vnesete vrstico kode:

Meni osebno je to zelo nadležno in onemogočim funkcijo.

Napake pri sestavljanju

Preden poskusi zagnati postopek, bo VBA postopek "prevedel". S prevajanjem se program iz izvorne kode (ki jo vidite) pretvori v izvedljivo obliko (ne vidite).

Napake pri sestavi VBA so napake, ki preprečujejo sestavljanje kode.

Dober primer napake pri prevajanju je manjkajoča deklaracija spremenljivke:

Drugi primeri vključujejo:

  • Za brez Naslednji
  • Izberite brez Konec Izberite
  • Če brez Konec Če
  • Klicanje a postopku ki ne obstaja

Napake skladnje (prejšnji razdelek) so podskup napak pri prevajanju.

Debug> Compile

Ko poskusite zagnati postopek, se bodo pojavile napake pri prevajanju. V idealnem primeru bi identificirali napake pri sestavljanju, preden poskusite zagnati postopek.

To lahko storite tako, da vnaprej sestavite projekt. Če želite to narediti, pojdite na Debug> Compile VBA Project.

Prevajalnik bo »šel« na prvo napako. Ko odpravite to napako, znova sestavite projekt. Ponavljajte, dokler ne odpravite vseh napak.

Lahko rečete, da so vse napake odpravljene, ker Sestavite projekt VBA bo obarvano sivo:

Napaka pretoka

The Napaka pretoka VBA se pojavi, ko poskušate dati vrednost v preveliko spremenljivko. Na primer, Celobrojne spremenljivke lahko vsebuje samo vrednosti med -32,768 do 32,768. Če vnesete večjo vrednost, boste prejeli napako Overflow:

Namesto tega uporabite Dolga spremenljivka za shranjevanje večjega števila.

Drugi pogoji napak VBA

Napaka ulova VBA

Za razliko od drugih programskih jezikov v VBA ni Izjava o ulovu. Izjavo o ulovu pa lahko podvojite z uporabo On Napaka Nadaljuj Naprej in Če Err.Številka 0 Potem. To je opisano zgoraj v naslovu Obravnavanje napak z številko napake.

Napaka zanemarjanja VBA

Če želite prezreti napake v VBA, preprosto uporabite datoteko On Napaka Nadaljuj Naprej izjava:

1 On Napaka Nadaljuj Naprej

Kot je navedeno zgoraj, morate biti pri uporabi te izjave previdni, saj ne odpravi napake, ampak preprosto prezre vrstico kode, ki vsebuje napako.

Napaka vrtenja VBA / Err.Raise

Za napako v VBA uporabite datoteko Napaka dvig metoda.

Ta vrstica kode bo povzročila napako med izvajanjem '13': Neujemanje vrste:

1 Napaka dviga (13)

Ujemanje napak VBA

Ujemanje napak VBA je le še en izraz za obravnavo napak VBA.

Sporočilo o napaki VBA

A Sporočilo o napaki VBA izgleda takole:

Ko kliknete »Odpravi napake«, boste videli vrstico kode, ki oddaja napako:

Obnavljanje napak VBA

Najboljši način za odpravljanje napak v zanki je uporaba On Napaka Nadaljuj Naprej skupaj z Err.Številka za odkrivanje napake (Ne pozabite uporabiti Napaka Jasno po vsakem pojavu odpraviti napako).

Spodnji primer bo razdelil dve številki (stolpec A s stolpcem B) in rezultat prikazal v stolpcu C. Če pride do napake, bo rezultat 0.

12345678910111213141516 Pod test ()Zatemni celico kot obsegOn Napaka Nadaljuj NaprejZa vsako celico v dosegu ("a1: a10")'Nastavi vrednost celicecell.Offset (0, 2) .Value = cell.Value / cell.Offset (0, 1) .Value'Če je Cell.Value Error, potem privzeto nastavite na 0Če Err.Številka 0 Potemcelica. Odmik (0, 2) .Vrednost = 0Napaka JasnoKonec ČeNaslednjiEnd Sub

Obravnavanje napak VBA pri dostopu

Vsi zgornji primeri delujejo popolnoma enako v Access VBA kot v Excelu VBA.

123456789101112131415161718 Funkcija DelRecord (frm kot obrazec)'ta funkcija se uporablja za brisanje zapisa v tabeli iz obrazcaNapaka GoTo se končaS frmČe .NewRecord Potem.RazveljaviIzhodna funkcijaKonec ČeKončaj sS frm.RecordsetClone.Zaznamek = frm.Zaznamek.Izbrišifrm.ZahtevaKončaj sIzhodna funkcijazaključek:KonecKončana funkcija

Vam bo pomagal razvoj spletnega mesta, ki si delijo stran s svojimi prijatelji

wave wave wave wave wave