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 što ako što naiđe na bilo koju vrstu pogreške, općenito kada kod 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 kôd na jedan ili drugi način koji 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 pretpostaviti da će se vrsta pogreške pojaviti, 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 koja nije tamo.

Ali imamo izjavu u VBA-u za rukovanje svim ovim vrstama 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, o 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 bi VBA trebao prikazati okvir s porukom o pogrešci govoreći o vrsti pogreške na koju je naišao. Čim VBA izvrši kôd, onemogućuje sve obrađivače pogrešaka u tom određenom bloku na kodu.
  2. Resume Next znači kad god dođe do pogreške, 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, već samo zanemaruje pogrešku.
  3. GoTo [label] 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 daje koder.

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

Ovaj VBA o predlošku pogreške možete preuzeti ovdje - VBA o predlošku pogreške

# 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 nultom vrijednošću. Broj pogreš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 dati nikakve poruke o pogreškama, već ć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 

Note: Here “KCalculation” is the label name I had given, you can give your own label name without any space.

Now if I execute this line of code it will not jump to the next line rather it will jump to the label name I have entered i.e. “KCalcualtion”. Here it will ignore the error given by “I” and also it will not execute “j” calculation but straight away it jumps to “KCalcualtion”.

#3 – Print Error Number in VBA

At the end of the code, we can also print the error number in a separate message box. The following line of code will do this job.

Code:

Err.Number

Now I will run this code first message box will show the calculation results.

Click on OK, it will show one more message box to show the error number.

We go 11 as the result i.e. Division by Zero.

We can also get the error description instead of the number. We just need to change the code, below is the code.

Code:

Err.Description

It will show a description like this.

Things to Remember

  • After entering “On Error Resume Next” at the end of code don’t forget to add the statement “On Error GoTo 0”
  • The label name should be the same in both places.
  • Label names need not be defined well in advance.
  • In the end, always see what was the error occurred through the separate message box.