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

Indholdsfortegnelse

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å en hvilken som helst type 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 af 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 muligvis ikke forvente, hvilken slags fejlkode kan kaste op, men hvis der opstår en fejl, bruger du 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 det ark, 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å et regneark eller en projektmappe, som 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 On Error, "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, at når runtime- fejlen opstår, skal excel eller VBA 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, hver gang fejlen opstår, denne erklæring instruerer excel til at ignorere denne fejl og gå videre til (genoptag næste) den næste linje kode uden at vise nogen fejlmeddelelser. Det betyder ikke, at det vil rette fejlen; snarere ignorerer det 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å

# 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 heltal, j som heltal på fejl Genoptag næste i = 20/0 j = 20/2 afslut sub

Hvis jeg nu udfører denne kode, giver den mig ingen fejlmeddelelser. snarere vil den udføre den næste kode kode, 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 en 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 som heltal, j som heltal, k som heltal ved fejl Genoptag næste 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 det over "I" -beregningen 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 Integer, j As Integer, k As Integer On Error 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
Bemærk: Her er "KCalculation" det etiketnavn, jeg havde givet; Du kan angive dit eget etiketnavn uden plads.

Hvis jeg udfører denne linje kode, springer den ikke til næste linje. Det springer snarere til det labelnavn, jeg har indtastet, dvs. "KCalcualtion." Her vil den ignorere fejlen givet af "I", og den udfører heller ikke "j" -beregning, men straks springer den til "KCalcualtion."

# 3 - Printfejlnummer i VBA

I slutningen af ​​koden kan vi også udskrive fejlnummeret i en separat meddelelsesboks. Den følgende linje kode udfører dette job.

Kode:

Fejlnummer

Nu kører jeg denne kode, første meddelelsesfelt viser beregningsresultaterne.

Klik på OK. Det viser endnu et meddelelsesfelt for at vise fejlnummeret.

Vi går 11; som et resultat, dvs. division efter nul.

Vi kan også få fejlbeskrivelsen i stedet for nummeret. Vi skal bare ændre koden. Nedenfor er koden.

Kode:

Fejlbeskrivelse

Det viser beskrivelse som denne.

Ting at huske

  • Efter at have indtastet "On Error Resume Next" i slutningen af ​​koden, glem ikke at tilføje udsagnet "On Error GoTo 0."
  • Etiketnavnet skal være det samme begge steder.
  • Etiketnavne behøver ikke defineres i god tid.
  • I sidste ende skal du altid se, hvad der var fejlen, der opstod gennem den separate meddelelsesboks.

Interessante artikler...