On Error Nastavi dalje: Rukovanje pogreškom u Excel VBA

  • Podijeli Ovo
Hugh West

U Microsoft Excel VBA, rukovanje pogreškama jedan je od kritičnih zadataka. Ako ste koder, znate važnost rukovanja pogreškama za izradu savršene aplikacije. Svaka greška u izjavi može ugroziti vaš VBA kod na puno načina. Dakle, morate biti oprezni pri rukovanju tim pogreškama dok izvršavate VBA kod. Postoji mnogo pogrešaka tijekom izvođenja s kojima se možete suočiti dok koristite VBA kod u Excelu. Da bismo riješili jedan od njih, koristimo se naredbom U slučaju pogreške Nastavi dalje .

U ovom ćete vodiču naučiti koristiti naredbu U slučaju pogreške Nastavi dalje u Excelu VBA. Ovaj vodič bit će točan s prikladnim primjerima i odgovarajućim ilustracijama. Dakle, ostanite s nama.

Preuzmite radnu bilježnicu za vježbe

VBA On Error Resume Next.xlsm

Error Handling in Excel VBA

Dok radite s Microsoft Excel VBA, suočit ćete se s mnogo pogrešaka u svojoj potproceduri. Kada VBA ne može izvršiti naredbu, izbacuje pogrešku vremena izvođenja.

Excel se automatski bavi tim pogreškama, pa kada se pojavi pogreška vremena izvođenja, prikazuje zadanu poruku o pogrešci kao što je sljedeća:

Sada se s tim možete nositi na različite načine pomoću nekih VBA izjava. O njima ću govoriti u kasnijim odjeljcima.

Pročitajte više: Kako popraviti #REF! Pogreška u Excelu (6 rješenja)

Izjave o pogrešci u VBA

Za rješavanje pogrešaka tijekom izvođenja, dajemo upute Excelu s naredbom o pogrešci. Ono odlučujeof NAME Greška u Excelu (10 primjera)

💬 Stvari koje treba zapamtiti

✎ On Error Resume Next ne ispravlja pogreške. U osnovi zanemaruje pogrešku i prelazi na sljedeću izjavu.

Excel hvata i pohranjuje pogreške tijekom izvođenja u objekt Err. Kada koristimo naredbu U slučaju pogreške Nastavi dalje , ona briše svojstva objekta Err.

Možete isključiti U slučaju pogreške Nastavi dalje naredbu u svom VBA kodu u Excelu dodavanjem naredbe On Error GoTo 0 .

Zaključak

Za kraj, nadam se da vam je ovaj vodič pružio nešto korisno znanje za korištenje Pri pogrešci Nastavi dalje u programu Excel VBA. Preporučujem da naučite i primijenite sve ove upute na svoj skup podataka. Preuzmite radnu bilježnicu za vježbanje i isprobajte ih sami. Također, slobodno dajte povratne informacije u odjeljku za komentare. Vaše vrijedne povratne informacije motiviraju nas za izradu ovakvih vodiča.

Ne zaboravite provjeriti našu web stranicu Exceldemy.com za razne probleme i rješenja u vezi s Excelom.

Nastavite učiti nove metode i rasti!

koju vrstu operacija želimo učiniti sljedeće odmah. U osnovi, onemogućujemo ove pogreške ovim vrstama rukovanja pogreškama.

Koristimo tri vrste iskaza o pogrešci (sintaksa) u Excel VBA.

  • U slučaju pogreške Idi na redak
  • U slučaju pogreške Nastavi dalje
  • U slučaju pogreške Idi na 0

Kada pronađete pogrešku, koristite naredbu On Error. Jer ako ne upotrijebite deklaraciju On Error , te pogreške tijekom izvođenja bit će katastrofalne. Prikazat će upit o pogrešci i zaustaviti izvršenje.

Kada koristimo naredbu On Error , uključujemo "omogućeno" rukovanje pogreškama. "Aktivni" rukovatelj greškama je omogućeni rukovatelj koji pokreće operaciju rukovanja greškama. Ako se pogreška pojavi dok je uključen rukovatelj greškom, rukovatelj greškom trenutne metode ne može podnijeti pogrešku. Nakon toga, kontrola se vraća na proceduru pozivanja.

Ako proces pozivanja ima omogućen rukovatelj greškom, on se pokreće za upravljanje greškom. Ako je obrađivač pogrešaka vašeg sustava pozivanja odgovarajuće uključen, kontrola se vraća putem ranijih procedura pozivanja dok ne pronađe omogućeni, ali neaktivni rukovatelj pogreškama. Ako ne može pronaći nijednog uključenog rukovatelja pogreškama u mirovanju, to znači da je pogreška katastrofalna u trenutku kada se pojavljuje.

Svaki put kada rukovatelj pogreškama vrati ovlaštenje pozivnoj proceduri, ta procedura razvija postojeću proceduru. Izvršenje ponovno počinje utrenutnu proceduru u trenutku odabranom naredbom Nastavi kada obrađivač pogrešaka obrađuje pogreške u bilo kojoj proceduri.

'Pri pogrešci Nastavi dalje' u VBA

Sada, On Error Resume Next naredba govori VBA-u da zanemari sve retke koda koji sadrže pogreške i odmah prijeđe na sljedeći redak koda. Nakon toga će Excel VBA kodovi preskočiti redak ili retke koji sadrže pogreške u sebi i prijeći na sljedeći niz kodova.

Izjava Pri pogrešci Nastavi dalje prisiljava implementaciju na nastavite s naredbom koja trenutačno prati liniju kodova koji su izazvali pogrešku u vremenu izvođenja. Ova izjava dopušta preskakanje izvršenja čak i ako postoji pogreška u vremenu izvođenja. Ako mislite da određena linija koda može proizvesti pogrešku, smjestite rutinu za rukovanje pogreškama tamo umjesto da je stavljate na drugo mjesto unutar procedure. Izjava On Error Resume Next postaje neaktivna kada vaš kod pozove drugu proceduru. Dakle, kada trebate odgovarajuće rukovanje pogreškama u toj rutini, morate pokrenuti naredbu On Error Resume Next u svakom imenovanom uzorku.

Razumno je kada linija koda koju može preskočiti nije potrebno za uspješno pokretanje makronaredbe. Ali zapamtite, može biti štetno ako ga koristite neispravno jer može dati neželjene rezultate.

Upamtite:

Uključeno Pogreška Nastavi Sljedeća izjava neispraviti pogreške tijekom izvođenja. U osnovi zanemaruje pogreške kod kojih će se vaše VB izvršavanje nastaviti od naredbe koja je generirala pogrešku vremena izvođenja.

Pogledajte sljedeći kod:

2943

Pokušali smo podijeliti 5 s 0 i 1. Pokrenimo kod. Prikazat će sljedeći izlaz:

Proizvodi pogrešku vremena izvođenja. Ne možemo podijeliti broj s 0. Kada debugujete kod, vidjet ćete sljedeće:

Kada VB program pronađe pogrešku, odmah zaustavlja proceduru. Ne izvršava sljedeći redak.

Sada, implementirajmo naredbu On Error Resume Next prije izjave o pogrešci:

9261

Nakon pokretanja koda, vi ćete pogledajte sljedeće:

Kao što vidite, VBA zanemaruje redak koji proizvodi pogrešku i odmah prelazi na sljedeći redak koda. Na ovaj način možete koristiti naredbu On Error Resume Next za rješavanje pogreške u Excel VBA.

Primjeri 'On Error Resume Next' u VBA

U u sljedećim odjeljcima pružit ću vam dva primjera izjave Pri pogrešci Nastavi dalje koju možete implementirati u svoj Excel radni list koristeći VBA. Preporučujem da sve ovo naučite i primijenite u svojoj radnoj bilježnici. Definitivno će povećati vaše znanje o programu Excel.

1. 'Pri pogrešci Nastavi dalje' izjava za skrivanje radnih listova

Sada, u ovom primjeru, pokazat ću vam VBA kod kojiće sakriti sve radne listove vaše aktivne radne knjige.

Pogledajte sljedeću sliku zaslona:

Ovdje imamo četiri radna lista. Sve ćemo ih sakriti pomoću sljedećeg VBA koda:

5536

Kada izvršite sljedeći kod, vidjet ćete sljedeću pogrešku vremena izvođenja:

Excel prikazuje ovu pogrešku jer ne možete sakriti sve listove u radnoj knjizi. Dakle, morate zanemariti grešku. Da biste to učinili, morate implementirati naredbu On Error Resume Next u retku koda.

5251

Nakon dovršetka izvođenja VBA koda, vidjet ćete sljedeći izlaz:

Na kraju nećete vidjeti nikakve pogreške nakon izvršenja. Dakle, naša izjava On Error Resume Next radila je jako dobro u VBA kodu.

Pročitajte više: Pogreške u Excelu i njihovo značenje (15 različitih pogrešaka)

2. Funkcija VLOOKUP s 'On Error Resume Next' u VBA

U ovom primjeru pokazat ću primjer funkcije VLOOKUP u VBA . Sada ovaj VBA kod također uključuje izjavu On Error Resume Next .

Pogledajte sljedeću sliku zaslona:

Ovdje , možete vidjeti imena nekih ljudi i njihovu dob. U susjednoj tablici koristit ćemo VLOOKUP da bismo pronašli ime i dob osobe.

Upišite sljedeći kod da to učinite:

8808

Sada pokrenite makro . Vidjet ćete sljedeću pogrešku:

Ovo je vrijeme izvođenjagreška. Zašto se to događa? Ponovno pogledajte skup podataka:

Kao što vidite, nema podataka za “Aaron” i “Emma”. Zbog toga izvršava samo VLOOKUP za prvi unos. Nakon toga zaustavlja izvršenje. Sada, ako želite zanemariti pogrešku i nastaviti s traženjem ostatka dobi, upotrijebite naredbu On Error Resume Next .

6449

Nakon pokretanja VBA koda, vidjet ćete sljedeći izlaz:

Kao što vidite, primjenom naredbe On Error Resume Next zanemarili smo pogrešku i pronašli ostale osobe dobi. Naš VBA kod nije pronašao nikakve podatke o Aaronu i Emmi. Zato je ignorirao te vrijednosti i vratio ostatak vrijednosti u radni list programa Excel.

Pročitajte više: [Popravljeno] Excel je pronašao problem s jednom ili više referenci formula u ovom radnom listu

Isključite 'On Error Resume Next' s Excel VBA

Možda ste sada u situaciji u kojoj želite zanemariti pogreške za određeni segment VBA koda. Upamtite, ako koristite naredbu On Error Resume Next u VBA kodu, preskočit će sve pogreške nakon toga. Sada, ako to želite isključiti i omogućiti rukovanje pogreškama za drugi segment, koristite On Error GoTo 0 . Ponovno će omogućiti obradu pogrešaka.

Generička upotreba:

Sub error_handling()

Za ignoriranje pogrešaka

Pri pogrešci Nastavi dalje

// linije kodova

Douključi rukovanje pogreškama

On Error GoTo 0

//redovi kodova

End sub

Pogledajte sljedeći VBA kod:

7624

Ranije smo koristili kod za funkciju VLOOKUP . Ovdje je dodan dodatni dio koda za demonstraciju. Naš kod će zanemariti pogreške tijekom izvođenja VLOOKUP-a ali će aktivirati obradu pogrešaka nakon naredbe On Error GoTo 0 .

Pročitajte više: Excel VBA: Isključite "Pri pogrešci Nastavi dalje"

VBA 'Pri pogrešci Idi na'

Ranije sam govorio rukovanje pogreškama pomoću metode On Error. Cijeli naš članak bio je o Pri pogrešci Nastavi dalje. Postoje i dvije vrste rukovanja pogreškama o kojima ću raspravljati u sljedećim odjeljcima.

1. VBA On Error GoTo 0

On Error Goto 0 statement je ugrađena postavka programa Excel ako vaši kodovi u sebi nemaju rukovatelja pogreškama. To u osnovi podrazumijeva da kada VBA pronađe pogrešku s On Error GoTo 0 , zaustavit će izvođenje koda i prikazati svoj tradicionalni okvir s porukom o pogrešci.

On Error GoTo 0 iskaz u osnovi isključuje obradu grešaka u sadašnjoj proceduri. Ne definira liniju 0 kao početak koda za obradu pogrešaka, čak i ako metoda uključuje liniju označenu brojem 0.

Pogledajte sljedeći kod:

9622

Imamo već vam je pokazao ovaj kod. Ovaj kod zapravo skriva sve radne listoveu vašoj trenutnoj radnoj knjižici. Sada doista imam dodatni dio koda s On Error GoTo 0 za prikaz pogreške. Ako pokrenete kôd, vidjet ćete sljedeće:

Pokazuje ovu pogrešku jer ne možemo imati listove s istim nazivom u aktivnoj radnoj knjizi.

2. VBA On Error GoTo redak

Sada također možete uputiti Excel da pokrene drugi segment koda ako pronađe bilo kakvu pogrešku pomoću On Error GoTo redak . Govori Excelu da izvrši nešto nakon pronalaženja greške.

Argument retka je bilo koja oznaka retka ili broj retka. Ako naš kod uzrokuje bilo kakvu pogrešku tijekom izvođenja, premjestit će se u redak, uzrokujući aktivan rukovatelj pogreškama u izvođenju. Upamtite, vaša definirana linija mora biti u točnoj proceduri kao izjava On Error; inače će uzrokovati pogrešku pri kompajliranju.

Pogledajte sljedeći kod:

9553

Vidjeli ste kod u prethodnom primjeru. Kada smo koristili On Error GoTo 0 , to je uzrokovalo pogreš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 dijaloški okvir standardne pogreške. Umjesto toga, prikazuje prilagođeni okvir s porukom koji smo stvorili u segmentu error_handler . Kada Excel pronađe bilo kakvu pogrešku, skače na  segment error_handler i prikazuje nam okvir s porukom.

Također smo koristili Exit Sub u postupku.Ako ne postoji list pod nazivom “ VLOOKUP “, naš VBA kod će preimenovati aktivni list. Zatim ovdje moramo dovršiti izvođenje jer ne moramo nastaviti s rukovateljem greškama i prikazati okvir s porukom.

VBA 'On Error' ne radi u Excelu

Ponekad, koliko god se trudili, metoda On Error neće raditi. Prethodno smo implementirali metodu On Error za obradu pogrešaka. No, ponekad će prikazati pogreške čak i ako koristite Pri pogrešci Nastavi dalje ili Pri pogrešci Idi na 0 . U vašem kodu može biti nekoliko razloga koje morate popraviti. Neću vam to pokazati.

Osnovni razlog zašto VBA ' On Error' ne radi u Excelu je uključivanje opcije “Break on All Errors” u Excelu.

Slijedite ove korake da to riješite:

📌 Koraci

  • Prvo pritisnite Alt+F11 na tipkovnici da otvorite VBA editor.
  • Sada kliknite Alati > Opcije.

  • Nakon toga kliknite na karticu Općenito u dijaloškom okviru Opcije okvir.

  • Ovdje možete vidjeti da je “ Prekid na svim pogreškama ” već označeno. To vas u osnovi sprječava u rukovanju pogreškama.
  • Da biste to promijenili, odaberite opciju “ Prekid na neobrađenim pogreškama ” i kliknite na U redu .

Nadam se da će riješiti vaš problem VBA "On Error" koji ne radi u Excelu.

Pročitajte više: Razlozi i Ispravci

Hugh West vrlo je iskusan Excel trener i analitičar s više od 10 godina iskustva u industriji. Diplomirao je računovodstvo i financije te magistrirao poslovno upravljanje. Hugh ima strast za podučavanjem i razvio je jedinstveni pristup podučavanju koji je lako pratiti i razumjeti. Njegovo stručno poznavanje programa Excel pomoglo je tisućama studenata i profesionalaca diljem svijeta da poboljšaju svoje vještine i postignu uspjeh u karijeri. Putem svog bloga, Hugh dijeli svoje znanje sa svijetom, nudeći besplatne vodiče za Excel i online obuku kako bi pomogao pojedincima i tvrtkama da dostignu svoj puni potencijal.