VBA om fejlmeddelelser | Top 3 måder at håndtere fejl på

Excel VBA om fejlmeddelelse

VBA On Error- sætning er en type fejlhåndteringsmekanisme, der bruges til at guide koden til at gøre hvad, hvis den støder på enhver form for fejl, generelt når en kode støder på en fejl, stopper udførelsen, men med denne erklæring i koden udføres udførelsen koden fortsætter, som den har et sæt instruktioner, der skal udføres, når den støder på en fejl.

Forudse fejlen i koden gør dig til en pro i VBA-kodning. Du kan ikke gøre koden 100% effektiv, selvom du er sikker på din kode på en eller anden måde, kan det give en fejl.

Det er næsten en umulig opgave at identificere og håndtere enhver form for fejl, men vi har forskellige måder at håndtere en fejl i VBA på. Mens du skriver koden, kan du ikke forvente, at den slags fejlkode kan kaste op, men hvis der opstår en fejl, vil du bruge mere tid på fejlretning end at skrive selve koden.

Hvad er en fejl?

En fejl er intet andet end en kodelinje kan ikke udføres på grund af funktionaliteten eller den forkerte kode. Så prøv at foregribe fejlen og håndter den.

For eksempel, hvis du forsøger at slette arket, der ikke er der, kan vi naturligvis ikke udføre denne kodelinje.

En fejl er af tre typer, den ene kompileres fejl på grund af sort angivne variabler. Den anden er dataindtastningsfejl på grund af forkerte indtastninger af koderen, og den tredje er kørselsfejl på grund af at VBA ikke kan genkende kodelinjen. For at prøve at få adgang til eller arbejde på regneark eller projektmappe, der ikke er der.

Men vi har en erklæring i VBA til at håndtere alle disse slags fejl, dvs. "On Error" -erklæring.

Typer af fejlmeddelelser

Nøglepunktet ved håndteringsfejl i VBA er udsagnet "On Error". For eksempel Ved fejl “genoptag næste linje”, “gå til eller spring til en anden linje” osv ...

On Error-sætning har tre slags udsagn til sig.

  1. GoTo 0  betyder, når kørselstidsfejl opstår excel, eller VBA skal vise fejlmeddelelsesboksen, der siger den slags fejl, den er stødt på. Så snart VBA udfører koden, deaktiverer det alle fejlhåndterere i den pågældende blok på koden.
  2. Genoptag næste betyder, når fejlen opstår, denne erklæring instruerer excel til at ignorere denne fejl og gå videre til (genoptag næste) næste kodelinje uden at vise nogen fejlmeddelelser. Det betyder ikke, at det vil rette fejlen, men det ignorerer bare fejlen.
  3. GoTo [label] betyder, at når VBA støder på en fejl, skal du gå til den tildelte label. Dette får koden til at springe til den specifikke linje, der leveres af koderen.

Top 3 måder at håndtere fejl i VBA på

Du kan downloade denne VBA On Error Template her - VBA On Error Template

# 1 - Ved fejl Genoptag næste

Antag, at du deler værdien 20 med 0, og at du har erklæret variablen for at tildele resultatet af divisionen til den.

Kode:

 Sub OnError_Example1 () Dim i som heltal i = 20/0 Afslut sub 

Hvis du kører denne kode, kaster den nedenstående fejl.

Så du kan ikke dele noget tal med nul værdi. Kørselstidens fejlnummer er 11, dvs. division efter nul.

Nu vil jeg tilføje endnu en linje til koden.

Kode:

 Sub OnError_Example1 () Dim i som heltal, j som heltal i = 20/0 j = 20/2 Afslut sub 

Nu vil jeg tilføje erklæringen On error CV næste øverst.

Kode:

 Sub OnError_Example1 () Dim i Som Integer, j Som Integer On Error Genoptag Næste i = 20/0 j = 20/2 End Sub 

Hvis jeg nu udfører denne kode, vil det ikke give mig nogen fejlmeddelelser, men det vil udføre den næste kodelinje, dvs. j = 20/2.

# 2 - Ved fejl GoTo-etiket

Jeg har erklæret tre variabler.

Kode:

 Sub OnError_Example1 () Dim i som heltal, j som heltal, k som heltal 

For alle disse tre variabler tildeler jeg divisionsberegning.

Kode:

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

Resultatet af alle disse tre beregninger vises i meddelelsesfeltet.

Kode:

 Sub OnError_Example1 () Dim i som heltal, j som heltal, k som heltal i = 20/0 j = 20/2 k = 10/5 MsgBox "Værdien af ​​i er" & i & vbNewLine & "Værdien af ​​j er "& j & _ vbNewLine &" Værdien af ​​k er "& k & vbNewLine End Sub 

Nu vil jeg forsøge at udføre denne kode, da beregningen af ​​"I" ikke er korrekt, vi får kørtidsfejl 11.

Nu vil jeg tilføje "On Error Resume Next" -erklæringen.

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 "Værdien af ​​i er" & i & vbNewLine & "The værdien af ​​j er "& j & _ vbNewLine &" Værdien af ​​k er "& k & vbNewLine End Sub 

Hvis jeg udfører dette, springer "I" -beregningen over og udfører de resterende to beregninger, og resultatet er som følger.

Nu i stedet for "On Error Resume Next" vil jeg tilføje "On Error GoTo KCalculation"

Kode:

 Sub OnError_Example1 () Dim i som heltal, j som heltal, k som heltal ved fejl Gå til KBeregning: i = 20/0 j = 20/2 K Beregning: k = 10/5 MsgBox "Værdien af ​​i er" & i & vbNewLine & "Værdien af ​​j er" & j & _ vbNewLine & "Værdien af ​​k er" & 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.