VBA om feilmeldinger | Topp 3 måter å håndtere feil på

Excel VBA On Error Statement

VBA On Error- setning er en type feilhåndteringsmekanisme som brukes til å veilede koden til å gjøre hva hvis den støter på en hvilken som helst type feil, vanligvis når en kode støter på en feil, stopper kjøringen, men med denne setningen i koden blir kjøringen av koden fortsetter slik den har sett med instruksjoner å gjøre når den støter på en feil.

Å forutse feilen i koden gjør deg til en proff i VBA-koding. Du kan ikke gjøre koden 100% effektiv, selv om du er trygg på koden din på en eller annen måte, kan det føre til en feil.

Det er nesten en umulig oppgave å identifisere og håndtere alle slags feil, men vi har forskjellige måter å håndtere en feil i VBA på. Mens du skriver koden, kan du ikke forvente at typen feilkode kan kaste opp, men hvis det oppstår feil, vil du bruke mer tid på feilsøking enn å skrive selve koden.

Hva er en feil?

En feil er bare en kodelinje kan ikke utføres på grunn av funksjonaliteten eller feil kode. Så prøv å forutse feilen og håndter den.

For eksempel, hvis du prøver å slette arket som ikke er der, kan vi selvsagt ikke utføre den kodelinjen.

En feil er av tre typer, en kompileres feil på grunn av sortvariabler. Den andre er dataregistreringsfeil på grunn av feil oppføringer av koderen, og den tredje er kjøretidsfeil på grunn av at VBA ikke kan gjenkjenne kodelinjen. For å prøve å få tilgang til eller jobbe med regneark eller arbeidsbok som ikke er der.

Men vi har en uttalelse i VBA for å håndtere alle slags feil, dvs. "On Error" -uttalelse.

Typer av feilmeldinger

Nøkkelpunktet for håndteringsfeil i VBA er "On Error" -uttalelsen. For eksempel Ved feil “fortsett neste linje”, “gå til eller hopp til en annen linje”, osv ...

On Error statement har tre typer utsagn.

  1. GoTo 0  betyr når kjøretidsfeilen utmerker seg, eller VBA skal vise feilmeldingsboksen som sier hvilken type feil den har opplevd. Så snart VBA utfører koden, deaktiverer det alle feilhåndterere i den aktuelle blokken på koden.
  2. Fortsett neste betyr når feilen oppstår, denne instruksjonen instruerer excel å ignorere den feilen og gå videre til (gjenoppta neste) neste kodelinje uten å vise noen feilmeldinger. Det betyr ikke at det vil fikse feilen, det ignorerer bare feilen.
  3. GoTo [label] betyr når VBA støter på en feil, gå til den tildelte etiketten. Dette får koden til å hoppe til den spesifikke linjen som tilbys av koderen.

Topp 3 måter å håndtere feil i VBA

Du kan laste ned denne VBA On Error Template her - VBA On Error Template

# 1 - Ved feil Gjenoppta neste

Anta at du deler verdien på 20 med 0, og at du har erklært variabelen for å tildele resultatet av divisjonen til den.

Kode:

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

Hvis du kjører denne koden, vil den kaste feilen nedenfor.

Så du kan ikke dele noe tall med null verdi. Kjøretidens feilnummer er 11 dvs. divisjon etter null.

Nå vil jeg legge til en linje til koden.

Kode:

 Sub OnError_Example1 () Dim i Som Integer, j As Integer i = 20/0 j = 20/2 End Sub 

Nå vil jeg legge til uttalelsen On error CV neste øverst.

Kode:

 Sub OnError_Example1 () Dim i As Integer, j As Integer On Error Resume Next i = 20/0 j = 20/2 End Sub 

Nå hvis jeg utfører denne koden, vil det ikke gi meg noen feilmeldinger, men den vil utføre neste linje med kode, dvs. j = 20/2.

# 2 - På feil GoTo-etikett

Jeg har erklært tre variabler.

Kode:

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

For alle disse tre variablene vil jeg tildele divisjonsberegning.

Kode:

 Sub OnError_Example1 () Dim i Som Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5

Resultatet av alle disse tre beregningene vises i meldingsboksen.

Kode:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "Verdien av i er" & i & vbNewLine & "Verdien av j er "& j & _ vbNewLine &" Verdien av k er "& k & vbNewLine End Sub 

Nå vil jeg prøve å utføre denne koden siden beregningen av "jeg" ikke er riktig, vil vi få kjøretidsfeil 11.

Nå vil jeg legge til uttalelsen "On Error Resume Next".

Kode:

 Sub OnError_Example1() Dim i As Integer , j As Integer , k As Integer On Error Resume Next i = 20 / 0 j = 20 / 2 k = 10 / 5 MsgBox "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & k & vbNewLine End Sub 

If I execute this it will skip “I” calculation and execute the remaining two calculations and the result is as follows.

Now instead of “On Error Resume Next” I will add “On Error GoTo KCalculation”

Code:

 Sub OnError_Example1() Dim i As Integer , j As Integer , k As Integer On Error GoTo KCalculation: i = 20 / 0 j = 20 / 2 KCalculation: k = 10 / 5 MsgBox "The value of i is " & i & vbNewLine & "The value of j is " & j & _ vbNewLine & "The value of k is " & 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.