VBA o izjavama o pogreškama - Tri najbolja načina za rješavanje pogrešaka

Izjava o pogrešci u programu Excel VBA

Izjava VBA o pogrešci vrsta je mehanizma za rukovanje pogreškama koji se koristi za usmjeravanje koda da učini što ako naiđe na bilo koju vrstu pogreške, obično kada kôd naiđe na pogrešku izvršenje se zaustavlja, ali s ovom izjavom u kodu izvršavanje kod se nastavlja kao što je postavio niz uputa za slučaj kada naiđe na pogrešku.

Predviđanje pogreške u kodu čini vas profesionalcem u VBA kodiranju. Ne možete učiniti kôd 100% učinkovitim. Čak i ako ste sigurni u svoj kod na ovaj ili onaj način, to može dovesti do pogreške.

Gotovo je nemoguć zadatak identificirati i riješiti svaku vrstu pogreške, ali u VBA imamo različite načine rješavanja pogrešaka. Tijekom pisanja koda možda nećete predvidjeti koju vrstu pogreške može isprazniti, ali ako dođe do pogreške, potrošit ćete više vremena na otklanjanje pogrešaka nego na pisanje samog koda.

Što je pogreška?

Pogreška nije ništa drugo nego se linija koda ne može izvršiti zbog funkcionalnosti ili pogrešnog koda. Zato pokušajte predvidjeti pogrešku i riješiti je.

Na primjer, ako pokušate izbrisati list kojeg nema, očito ne možemo izvršiti taj redak koda.

Pogreška je tri vrste, jedna je pogreška prevedena zbog neprijavljenih varijabli. Druga je pogreška u unosu podataka zbog pogrešnih unosa kodera, a treća je pogreška vremena izvođenja zbog toga što VBA ne može prepoznati liniju koda. Za pokušaj pristupa ili obrade radnog lista ili radne knjige koji nisu tamo.

Ali u VBA imamo izjavu koja obrađuje sve ove vrste pogrešaka, tj. Izjavu "O pogrešci".

Vrste izjava o pogreškama

Ključna točka rukovanja pogreškama u VBA-u je izjava “On Error”. Na primjer, Na pogrešci, "nastavi sljedeći redak", "idi ili pređi na drugi redak" itd. …

Izjava o pogrešci sadrži tri vrste izjava.

  1. GoTo 0 znači kad god se dogodi pogreška u vremenu izvođenja, excel ili VBA trebali bi prikazati okvir s porukom o pogrešci govoreći o vrsti pogreške na koju je naišlo. Čim VBA izvrši kôd, onemogućuje sve rukovatelje pogreškama u tom određenom bloku na kodu.
  2. Resume Next znači kad god se dogodi pogreška, ova izjava nalaže Excelu da ignorira tu pogrešku i prijeđe na (nastavak sljedećeg) sljedeći redak koda bez prikazivanja poruka o pogrešci. To ne znači da će ispraviti pogrešku; nego samo zanemaruje pogrešku.
  3. GoTo (oznaka) znači kad god VBA naiđe na pogrešku, idite na dodijeljenu oznaku. To čini da kôd preskoči na određenu liniju koju nudi koder.

Tri najbolja načina za rješavanje pogrešaka u VBA-u

# 1 - Pogreška Nastavi dalje

Pretpostavimo da vrijednost 20 dijelite s 0 i proglasili ste varijablu da biste joj dodijelili rezultat podjele.

Kodirati:

Sub OnError_Example1 () Dim i As Integer i = 20/0 End Sub

Ako pokrenete ovaj kôd, izbacit će donju pogrešku.

Dakle, niti jedan broj ne možete podijeliti s nulom. Broj greške u vremenu izvođenja je 11, tj. Podjela s nulom.

Sad ću dodati još jedan redak u kod.

Kodirati:

Sub OnError_Example1 () Dim i kao cjelina, j kao cjelina i = 20/0 j = 20/2 Kraj pod

Sada ću dodati izjavu o nastavku greške, slijedeću na vrhu.

Kodirati:

Sub OnError_Example1 () Dim i kao cjelina, j kao cjelina na pogrešku Nastavi dalje i = 20/0 j = 20/2 Kraj pod

Ako izvršim ovaj kod, neće mi se pojaviti poruke o pogrešci; nego će izvršiti sljedeći redak koda, tj. j = 20/2.

# 2 - Oznaka pogreške GoTo

Proglasio sam tri varijable.

Kodirati:

Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer

Za sve ove tri varijable dodijelit ću izračun dijeljenja.

Kodirati:

Sub OnError_Example1 () Dim i kao cjelina, j kao cjelina, k kao cjelina i = 20/0 j = 20/2 k = 10/5

Rezultat sva ova tri izračuna prikazat će se u okviru za poruku.

Kodirati:

Sub OnError_Example1 () Dim i Kao cijeli broj, j Kao cijeli broj, k Kao cijeli broj i = 20/0 j = 20/2 k = 10/5 MsgBox "Vrijednost i je" & i & vbNewLine & "Vrijednost j je "& j & _ vbNewLine &" Vrijednost k je "& k & vbNewLine End Sub

Sada ću pokušati izvršiti ovaj kod, jer izračun "I" nije ispravan. Dobit ćemo pogrešku vremena izvođenja 11.

Sada ću dodati izjavu "On Error Resume Next".

Kodirati:

Pod OnError_Example1 () Dim i kao cjelina, j kao cjelina, k kao cjelina pri pogrešci Nastavi dalje i = 20/0 j = 20/2 k = 10/5 MsgBox "Vrijednost i je" & i & vbNewLine & "The vrijednost j je "& j & _ vbNewLine &" Vrijednost k je "& k & vbNewLine End Sub

Ako ovo izvršim, preskočit će izračun "I" i izvršiti preostala dva izračuna, a rezultat je sljedeći.

Sada ću umjesto "On Error Resume Next" dodati "On Error GoTo KCalculation".

Kodirati:

Sub OnError_Example1 () Dim i kao cjelina, j kao cjelobrojno, k kao cjelobrojno na pogrešku Idi na K Izračun: i = 20/0 j = 20/2 KIzračun: k = 10/5 MsgBox "Vrijednost i je" & i & vbNewLine & "Vrijednost j je" & j & _ vbNewLine & "Vrijednost k je" & k & vbNewLine End Sub
Napomena: Ovdje je "KCalculation" naziv oznake koji sam dao; možete dati svoje ime etikete bez ikakvog prostora.

Ako izvršim ovaj redak koda, on neće skočiti na sljedeći redak. Umjesto toga, skočit će na naziv oznake koji sam unijeo, tj. "KCalcualtion". Ovdje će zanemariti pogrešku koju daje "I", a također neće izvršiti izračun "j", ali odmah prelazi na "KCalcualtion".

# 3 - Ispis broja pogreške u VBA

Na kraju koda također možemo ispisati broj pogreške u zaseban okvir s porukom. Sljedeći redak koda obavit će ovaj posao.

Kodirati:

PogreškaBroj

Sada ću pokrenuti ovaj kôd, prvi okvir za poruku prikazuje rezultate izračuna.

Kliknite U redu. Pokazat će se još jedan okvir s porukom za prikaz broja pogreške.

Idemo 11; kao rezultat, tj. podjela nula.

Umjesto broja možemo dobiti i opis pogreške. Samo trebamo promijeniti kod. Ispod je kod.

Kodirati:

PogreškaOpis

Pokazat će ovakav opis.

Stvari koje treba zapamtiti

  • Nakon što na kraju koda unesete “On Error Resume Next”, ne zaboravite dodati izjavu “On Error GoTo 0.”
  • Naziv naljepnice trebao bi biti jednak na oba mjesta.
  • Imena etiketa ne moraju se definirati unaprijed.
  • Na kraju, uvijek pogledajte u čemu je došlo do pogreške u zasebnom okviru za poruke.

Zanimljivi članci...