Ovaj vodič će objasniti VBA On Error Resume Next i Goto Statement.
Čak i kad je vaš kod savršeno izgrađen, korisnik možda neće učiniti kako biste očekivali. Iz tog razloga morate umetnuti rukovatelje pogreškama u svoj kôd kad god postoji razlog da dođe do pogreške.
Uključeno Slijedi nastavak greške
Naredba On Error Resume Next naredbi govori VBA -i da preskoči sve retke koda koji sadrže pogreške i pređe na sljedeći redak. VBA će zanemariti redak ili retke s greškom i preći će na sljedeći redak koda.
To je korisno kada redak koda koji se može zanemariti nije kritičan za uspješno pokretanje makronaredbe, ali može biti prilično opasan ako se pogrešno koristi jer može dati nenamjerne rezultate.
Na primjer, u donjem postupku:
123456 | Sub HideAllSheets ()Zatamni kao radni listZa svaki ws u ActiveWorkbook.Sheetsws.Visible = NetačnoSljedeći wsKraj podm |
Ako pokrenemo ovaj kôd, dobit ćemo pogrešku jer ne možemo sakriti sve radne listove u radnu knjigu - barem jedna radna knjiga mora ostati vidljiva.
Međutim, ako izmijenimo postupak kao što je prikazano u nastavku, kôd će se nastaviti dalje od pogreške, a posljednji list u radnoj knjizi ostavit će vidljivim.
1234567 | Sub HideAllSheets ()Uključeno Slijedi nastavak greškeZatamni kao radni listZa svaki ws u ActiveWorkbook.Sheetsws.Visible = NetačnoSljedeći wsKraj podm |
Uključeno Greška Idi na 0
Ako u kodu nemamo rukovatelja pogreškama, Uključeno Greška Idi na 0 zadana je postavka programa Excel. To u osnovi znači da kada dođe do pogreške s Uključeno Greška Idi na 0, VBA će prestati izvršavati kôd i prikazati standardni okvir s porukom o pogrešci, na primjer:
Ako smo stavili grešku poput Uključeno Slijedi nastavak greške u našem kodu, ali tada želimo grešku postaviti na zadanu vrijednost, možemo umetnuti Uključeno Greška Idi na 0 redak u naš kôd.
12345678910 | Sub ErrorGoTo0 ()Uključeno Slijedi nastavak greškeZatamni kao radni listZa svaki ws u ActiveWorkbook.Sheetsws.Visible = NetačnoSljedeći wsUključeno Greška Idi na 0'Ovdje pokrenite više koda, na primjer:ActiveSheet.Name = "List 1"Kraj podm |
Sada, ako je došlo do greške u našem kodu nakon Uključeno Greška Idi na 0 crta, pojavit će se zadana poruka o pogrešci za Excel. U ovom primjeru već imamo list pod nazivom Sheet1 u ActiveWorkbook -u kao kôd iznad Uključeno Greška Idi na 0 skriva list, ali ga ne briše. Tada će se prikazati zadana poruka o pogrešci programa Excel koja označava da je naziv lista već zauzet.
Uključeno Greška Idi na Crta
Također možemo prisiliti naš kôd da se pomakne u drugu liniju koda pomoću Na Greška Idi na Crta koji govori VBA -i da prijeđe u određeni redak koda ako dođe do pogreške.
123456789101112 | Pod ErrorGoToLine ()Uključeno Slijedi nastavak greškeZatamni kao radni listZa svaki ws u ActiveWorkbook.Sheetsws.Visible = NetačnoSljedeći wsUključeno Greška GoTo errhandlerActiveSheet.Name = "List 1"Izlaz iz podvErrhandler:MsgBox ("Već postoji list zvan sheet1!", VbCritical)Kraj podm |
U gornjem primjeru, kada kôd pronađe list “Sheet1”, premješta se u redak koda ispod oznake rukovatelja pogreškama - u ovom slučaju poziva prilagođeni okvir s porukom koji obavještava korisnike da list već izlazi. Oznaka rukovatelja pogreškama mora imati dvotočku iza sebe kako bi VBA pokazala da je to oznaka.
1 | Errhandler: |
Kôd će tada skočiti dolje do retka ispod oznake i vratiti prilagođeni okvir s porukom.
Ovo je korisno kada ne želite da vaš korisnik može kliknuti Otklanjanje pogrešaka kako bi ušao u vaš kôd jer standardna Excel poruka uvijek daje mogućnost za otklanjanje pogrešaka u kodu.
Također nam treba i Izlaz iz podv u postupku. Ako ima NE list zvan Sheet1, tada bi se taj redak koda pokrenuo i preimenovao aktivni list u Sheet1. Zatim želimo da kôd završi - ne želimo da se prenese u rukovatelj pogreškama i prikaže okvir s porukom. Redak Exit Sub tada izlazi iz postupka i zaustavlja kôd.