Sadržaj
U Microsoft Excel VBA, rukovanje greškama je jedan od kritičnih zadataka. Ako ste koder, znate koliko je važno rukovanje greškama za izgradnju savršene aplikacije. Svaka greška u izjavi može ometati vaš VBA kod na mnogo načina. Dakle, morate biti oprezni da obrađujete te greške dok izvršavate VBA kod. Postoji mnogo grešaka tokom izvođenja sa kojima se možete suočiti dok koristite VBA kod u Excelu. Da riješimo jedan od njih, koristimo naredbu On Error Resume Next .
U ovom vodiču naučit ćete koristiti On Error Resume Next naredbu u Excelu VBA. Ovaj vodič će biti na pravom mjestu s odgovarajućim primjerima i odgovarajućim ilustracijama. Dakle, ostanite s nama.
Preuzmite radnu svesku za vježbe
VBA On Error Resume Next.xlsm
Rukovanje greškama u Excelu VBA
Dok radite sa Microsoft Excel VBA, suočit ćete se s puno grešaka u vašoj podproceduri. Kada VBA ne može da izvrši naredbu, izbacuje grešku tokom izvođenja.
Excel se automatski bavi ovim greškama, tako da kada se pojavi greška u toku rada, prikazuje podrazumevanu poruku o grešci kao što je sledeća:
Sada, možete se nositi s njima na različite načine pomoću nekih VBA izjava. O njima ću raspravljati u kasnijim odjeljcima.
Pročitajte više: Kako popraviti #REF! Greška u Excelu (6 rješenja)
O izjavama o grešci u VBA
Da bismo obradili greške u vremenu izvođenja, nalažemo Excelu naredbom On Error. Ono odlučujeod NAME greške u Excelu (10 primjera)
💬 Stvari koje treba zapamtiti
✎ Pri grešci Nastavi sljedeći ne ispravlja greške. U osnovi zanemaruje grešku i prelazi na sljedeću naredbu.
✎ Excel hvata i pohranjuje greške izvođenja u objektu Err. Kada koristimo naredbu On Error Resume Next , briše svojstva objekta Err.
✎ Možete isključiti On Error Resume Next naredbu u vašem VBA kodu u Excelu dodavanjem naredbe On Error GoTo 0 .
Zaključak
Da zaključimo, nadam se da vam je ovaj vodič pružio dio korisnog znanje za korištenje Pri grešci nastavi dalje u Excel VBA. Preporučujem da naučite i primijenite sve ove upute na svoj skup podataka. Preuzmite radnu svesku i isprobajte ih sami. Također, slobodno dajte povratne informacije u odjeljku za komentare. Vaše vrijedne povratne informacije nas motiviraju za kreiranje ovakvih tutorijala.
Ne zaboravite provjeriti našu web stranicu Exceldemy.com za razne probleme i rješenja u vezi s Excelom.
Nastavite da učite nove metode i nastavite da rastete!
kakve operacije želimo odmah da uradimo. U osnovi, onemogućavamo ove greške ovakvim rukovanjem greškama.Koristimo tri vrste On Error izjava (sintakse) u Excel VBA.
- U slučaju greške Idi na red
- Pri grešci nastavi dalje
- Pri grešci Idi na 0
Kada pronađete grešku, koristite naredbu On Error. Jer ako ne koristite deklaraciju On Error , te greške u toku izvođenja će biti katastrofalne. Pokazat će prompt za grešku i zaustaviti izvršenje.
Kada koristimo On Error izraz, uključujemo “omogućen” rukovalac greškama. "Aktivni" rukovalac greškama je omogućeni rukovalac koji pokreće operaciju rukovanja greškama. Ako dođe do greške dok je uključen rukovalac greškama, rukovalac greškama trenutne metode ne može izdržati grešku. Nakon toga, kontrola se vraća na proceduru pozivanja.
Ako proces pozivanja ima omogućen rukovalac greškama, on se pokreće da upravlja greškom. Ako je rukovalac greškama vašeg pozivajućeg sistema na odgovarajući način uključen, kontrola se vraća preko prethodnih procedura pozivanja sve dok ne pronađe omogućen, ali neaktivan rukovalac greškama. Ako ne može pronaći nikakav rukovalac greškama u stanju mirovanja, to znači da je greška katastrofalna u trenutku kada se pojavi.
Svaki put kada rukovalac greškama vrati ovlaštenje proceduri koja poziva, ta procedura razvija postojeću proceduru. Izvršenje se ponovo pokreće uprisutna procedura u trenutku odabranom naredbom Resume kada rukovalac greškama obrađuje greške u bilo kojoj proceduri.
'Pri grešci nastavi dalje' u VBA
Sada, On Error Resume Next naredba govori VBA da ignoriše sve redove koda koji imaju greške i da odmah pređe na sledeći red koda. Nakon toga, Excel VBA kodovi će preskočiti red ili redove koji u sebi sadrže greške i preći na sljedeći niz koda.
Naredba On Error Resume Next prisiljava implementaciju na nastavi sa komandom odmah prateći liniju kodova koja je izazvala grešku u toku izvođenja. Ova izjava dozvoljava preskakanje izvršenja čak i ako postoji greška u vremenu izvođenja. Ako mislite da određena linija koda može proizvesti grešku, postavite rutinu za rukovanje greškama tamo radije nego da je stavite na drugu lokaciju unutar procedure. Naredba On Error Resume Next postaje neaktivna kada vaš kod pozove drugu proceduru. Dakle, kada vam treba usklađeno rukovanje greškama u toj rutini, morate pokrenuti naredbu On Error Resume Next u svakom imenovanom obrascu.
Razumno je kada linija koda koju ste može preskočiti nije potrebno za uspješno pokretanje makroa. Ali zapamtite, može biti štetno ako ga koristite pogrešno jer može dati neželjene rezultate.
Zapamtite:
Uključeno Error Resume Next naredba ne radipopravite greške u toku izvođenja. U osnovi zanemaruje greške u kojima će se vaše VB izvršavanje nastaviti iz naredbe koja je generirala runtime error.
Pogledajte sljedeći kod:
8784
Pokušali smo podijeliti 5 sa 0 i 1. Pokrenimo kod. Prikazaće sledeći izlaz:
Proizvodi grešku u toku izvođenja. Ne možemo podijeliti broj sa 0. Kada otklonite greške u kodu, vidjet ćete sljedeće:
Kada VB program pronađe grešku, odmah zaustavlja proceduru. Ne izvršava sljedeću liniju.
Sada implementirajmo naredbu On Error Resume Next prije izjave o grešci:
8107
Nakon pokretanja koda, vi ćete pogledajte sledeće:
Kao što vidite, VBA ignoriše liniju koja proizvodi grešku i odmah prelazi na sledeći red koda. Na ovaj način možete koristiti naredbu Pri grešci nastavi dalje za rukovanje greškom u Excel VBA.
Primjeri 'Pri grešci nastavi dalje' u VBA
U U sljedećim odjeljcima, pružit ću vam dva primjera izjave On Error Resume Next koju možete implementirati u svoj Excel radni list koristeći VBA. Preporučujem da sve ovo naučite i primenite u svojoj radnoj svesci. Definitivno će povećati vaše znanje o Excel-u.
1. Naredba ‘On Error Resume Next’ za skrivanje radnih listova
Sada ću vam u ovom primjeru pokazati VBA kod kojiće sakriti sve radne listove vaše aktivne radne knjige.
Pogledajte sljedeći snimak ekrana:
Ovdje imamo četiri radna lista. Sve ćemo ih sakriti koristeći sljedeći VBA kod:
9261
Kada izvršite sljedeći kod, vidjet ćete sljedeću grešku u vremenu izvođenja:
Excel prikazuje ovu grešku jer ne možete sakriti sve listove u radnoj svesci. Dakle, morate zanemariti grešku. Da biste to uradili, morate implementirati naredbu On Error Resume Next u svom redu koda.
3042
Nakon što završite izvršavanje VBA koda, vidjet ćete sljedeći izlaz:
Na kraju, nećete vidjeti greške nakon izvršenja. Dakle, naša izjava On Error Resume Next je zaista dobro radila u VBA kodu.
Pročitajte više: Greške u Excelu i njihovo značenje (15 različitih grešaka)
2. Funkcija VLOOKUP sa 'On Error Resume Next' u VBA
U ovom primjeru ću pokazati primjer funkcije VLOOKUP u VBA . Sada, ovaj VBA kod također uključuje naredbu On Error Resume Next .
Pogledajte sljedeći snimak ekrana:
Ovdje , možete vidjeti imena nekih ljudi i njihove godine. U susjednoj tabeli koristit ćemo VLOOKUP da bismo pronašli ime i godine osobe.
Upišite sljedeći kod da biste to učinili:
8101
Sada pokrenite makro . Vidjet ćete sljedeću grešku:
Sada, ovo je vrijeme izvođenjagreška. Zašto se to dešava? Pogledajte ponovo skup podataka:
Kao što vidite, nema podataka za “Aaron” i “Emma”. Zato izvršava samo VLOOKUP za prvi unos. Nakon toga, zaustavlja izvršenje. Sada, ako želite da ignorišete grešku i da nastavite da pronađete ostatak uzrasta, koristite naredbu On Error Resume Next .
5349
Nakon pokretanja VBA koda, videćete sljedeći izlaz:
Kao što možete vidjeti, primjenom naredbe On Error Resume Next , zanemarili smo grešku i pronašli ostale osobe godine. Naš VBA kod nije pronašao nikakve podatke o Aaronu i Emmi. Zato je zanemario te vrijednosti i vratio ostale vrijednosti u Excel radnom listu.
Pročitajte više: [Popravljeno] Excel je pronašao problem sa jednom ili više referenci formule na ovom radnom listu
Isključite 'On Error Resume Next' sa Excel VBA
Sada ste možda u situaciji da želite da zanemarite greške za određeni segment VBA koda. Zapamtite, ako koristite naredbu On Error Resume Next u VBA kodu, ona će preskočiti sve greške nakon toga. Sada, ako želite to isključiti i omogućiti rukovanje greškama za drugi segment, koristite On Error GoTo 0 . Ponovo će omogućiti rukovanje greškama.
Generična upotreba:
Sub error_handling()
Za ignoriranje grešaka
U slučaju greške nastavi dalje
// redovi kodova
Douključite Rukovanje greškama
Uključeno Error GoTo 0
//linije kodova
Kraj pod
Pogledajte sljedeći VBA kod:
4867
Ranije smo koristili kod za funkciju VLOOKUP . Ovdje je dodat dodatni komad koda da vam pokažem. Naš kod će zanemariti greške dok izvodi VLOOKUP , ali će aktivirati rukovanje greškama nakon On Error GoTo 0 izjave.
Pročitajte više: Excel VBA: Isključite “On Error Resume Next”
VBA 'On Error GoTo'
Prethodno sam raspravljao rukovanje greškama pomoću metode On Error. Cijeli naš članak bio je o Nastavi s greškom dalje. Sada, postoje i dvije vrste rukovanja greškama o kojima ću raspravljati u sljedećim odjeljcima.
1. VBA na grešku GoTo 0
The On Error Goto 0 izjava je ugrađena postavka Excel-a ako vaši kodovi nemaju rukovalac greškama u sebi. To u osnovi implicira da kada VBA pronađe grešku sa On Error GoTo 0 , on će zaustaviti izvršavanje koda i pokazati svoj tradicionalni okvir za poruku o grešci.
On Error GoTo 0 izraz u osnovi isključuje rukovanje greškama u ovoj proceduri. Ne definira red 0 kao početak koda za rukovanje greškama, čak i ako metoda uključuje red sa brojem 0.
Pogledajte sljedeći kod:
6931
Imamo već vam je pokazao ovaj kod. Ovaj kod u osnovi skriva sve radne listoveu vašoj trenutnoj radnoj svesci. Sada, zaista imam dodatni dio koda sa On Error GoTo 0 da pokažem grešku. Ako pokrenete kod, vidjet ćete sljedeće:
Pokazuje ovu grešku jer ne možemo imati listove s istim imenom u aktivnoj radnoj knjizi.
2. VBA On Error GoTo red
Sada takođe možete uputiti Excel da pokrene drugi segment koda ako pronađe bilo kakvu grešku koristeći On Error GoTo red . Govori Excelu da izvrši nešto nakon što pronađe grešku.
Argument linije je bilo koja oznaka linije ili broj reda. Ako naš kod izazove bilo kakvu grešku u vremenu izvođenja, on će se premjestiti na liniju, uzrokujući da je rukovalac greškama aktivan u izvršavanju. Zapamtite, vaša definisana linija mora biti u tačnoj proceduri kao izjava On Error; u suprotnom, to će uzrokovati grešku kompajliranja.
Pogledajte sljedeći kod:
2267
Vidjeli ste kod u prethodnom primjeru. Kada smo koristili On Error GoTo 0 , to je izazvalo grešku. Ali, ovdje smo to zamijenili naredbom On Error GoTo line .
Sada pokrenite kod i vidjet ćete sljedeće:
Kao što vidite, ne prikazuje nam standardni dijalog o grešci. Umjesto toga, prikazuje prilagođeni okvir za poruke koji smo kreirali u segmentu error_handler . Kada Excel pronađe bilo kakvu grešku, skače na error_handler segment i pokazuje nam okvir za poruku.
Također smo koristili Izlazni pod u proceduri.Ako nema lista pod nazivom „ VLOOKUP “, naš VBA kod će preimenovati aktivni list. Zatim moramo završiti izvršenje ovdje jer ne moramo nastaviti s rukovateljem greškama i prikazati okvir s porukom.
VBA 'On Error' ne radi u Excelu
Ponekad, bez obzira koliko se trudili, metoda On Error neće raditi. Ranije smo implementirali metodu On Error za rukovanje greškama. Ali, ponekad će prikazati greške čak i ako koristite Pri grešci nastavi dalje ili U slučaju greške GoTo 0 . Možda postoji nekoliko razloga u vašem kodu koje morate popraviti. Neću vam to pokazati.
Osnovni razlog zašto VBA ' On Error' ne radi u Excel-u je uključivanje opcije "Prekini na svim greškama" u Excel-u.
Slijedite ove korake da to riješite:
📌 Koraci
- Prvo pritisnite Alt+F11 na tastaturi da otvorite VBA editor.
- Sada kliknite na Alati > Opcije.
- Nakon toga kliknite na karticu Općenito u dijaloškom okviru Opcije box.
- Ovdje, možete vidjeti, “ Prekid na svim greškama ” je već označeno. U osnovi vas sprečava da rukujete greškama.
- Da biste je promijenili, odaberite opciju “ Prekini na neobrađene greške ” i kliknite na OK .
Nadam se da će riješiti vaš problem da VBA “On Error” ne radi u Excelu.
Pročitajte više: Razlozi i ispravke