VBA om felmeddelanden - Topp 3 sätt att hantera fel

Innehållsförteckning

Excel VBA om felmeddelande

VBA On Error- sats är en typ av felhanteringsmekanism som används för att vägleda koden att göra vad om den stöter på någon typ av fel, vanligtvis när en kod stöter på ett fel slutar exekveringen men med detta uttalande i koden körningen av koden fortsätter som den har instruktioner att göra när det stöter på ett fel.

Att förutse felet i koden gör dig till ett proffs i VBA-kodning. Du kan inte göra koden 100% effektiv. Även om du är säker på din kod på ett eller annat sätt kan det orsaka ett fel.

Det är nästan en omöjlig uppgift att identifiera och hantera alla typer av fel, men vi har olika sätt att hantera ett fel i VBA. När du skriver koden kanske du inte räknar med vilken typ av felkod som kan kasta upp, men om något fel kommer kommer du att spendera mer tid på felsökning än att skriva själva koden.

Vad är ett fel?

Ett fel är inget annat än en kodrad kan inte köras på grund av funktionaliteten eller fel kod. Så försök att förutse felet och hantera det.

Om du till exempel försöker ta bort arket som inte finns, kan vi självklart inte köra den kodraden.

Ett fel är av tre typer en kompileras fel på grund av odeklarerade variabler. Det andra är datainmatningsfel på grund av fel inmatningar av kodaren, och det tredje är körtidsfel på grund av att VBA inte kan känna igen kodraden. För att försöka komma åt eller arbeta på ett kalkylblad eller en arbetsbok, som inte finns där.

Men vi har ett uttalande i VBA för att hantera alla dessa typer av fel, det vill säga "On Error" uttalande.

Typer av felmeddelanden

Den viktigaste punkten för hanteringsfel i VBA är uttalandet "On Error". Till exempel, vid fel, "återuppta nästa rad", "gå till eller hoppa till en annan rad", etc. …

On Error-uttalande har tre typer av uttalanden.

  1. GoTo 0 betyder när körtidsfelet inträffar, excel eller VBA ska visa felmeddelandefältet som säger vilken typ av fel det har stött på. Så snart VBA kör koden inaktiverar den alla felhanterare i det specifika blocket på koden.
  2. Återuppta nästa betyder när felet inträffar, detta uttalande instruerar excel att ignorera det felet och gå vidare till (återuppta nästa) nästa kodrad utan att visa några felmeddelanden. Det betyder inte att det kommer att åtgärda felet. snarare ignorerar det bara felet.
  3. GoTo (etikett) betyder när VBA stöter på ett fel, gå till den tilldelade etiketten. Detta gör att koden hoppar till den specifika raden som tillhandahålls av kodaren.

Topp 3 sätt att hantera fel i VBA

# 1 - Vid fel Återuppta nästa

Antag att du delar värdet 20 med 0 och att du har deklarerat variabeln för att tilldela resultatet av divisionen till den.

Koda:

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

Om du kör den här koden kommer det att kasta fel nedan.

Så du kan inte dela något tal med nollvärde. Körtid felnummer är 11, dvs Division by Zero.

Nu ska jag lägga till ytterligare en rad i koden.

Koda:

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

Nu lägger jag till uttalandet On error CV nästa längst upp.

Koda:

Sub OnError_Example1 () Dim i som heltal, j som heltal på fel Återuppta nästa i = 20/0 j = 20/2 slut sub

Om jag kör den här koden kommer det inte att ge mig några felmeddelanden. snarare kommer den att köra nästa kodrad, dvs j = 20/2.

# 2 - Vid fel GoTo-etikett

Jag har förklarat tre variabler.

Koda:

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

För alla dessa tre variabler kommer jag att tilldela en uppdelningsberäkning.

Koda:

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

Resultatet av alla dessa tre beräkningar visas i meddelandefältet.

Koda:

Sub OnError_Example1 () Dim i som heltal, j som heltal, k som heltal i = 20/0 j = 20/2 k = 10/5 MsgBox "Värdet på i är" & i & vbNewLine & "Värdet på j är "& j & _ vbNewLine &" Värdet för k är "& k & vbNewLine End Sub

Nu ska jag försöka köra den här koden eftersom beräkningen av "jag" inte är korrekt. Vi får körtidsfel 11.

Nu ska jag lägga till uttalandet ”On Error Resume Next”.

Koda:

Sub OnError_Example1 () Dim i som heltal, j som heltal, k som heltal vid fel Återuppta nästa i = 20/0 j = 20/2 k = 10/5 MsgBox "Värdet på i är" & i & vbNewLine & "The värdet på j är "& j & _ vbNewLine &" Värdet på k är "& k & vbNewLine End Sub

Om jag utför detta hoppar det över "I" -beräkningen och utför de återstående två beräkningarna, och resultatet blir följande.

Nu istället för "On Error Resume Next", kommer jag att lägga till "On Error GoTo KCalculation."

Koda:

Sub OnError_Example1 () Dim i som heltal, j som heltal, k som heltal vid fel GoTo KCalculation: i = 20/0 j = 20/2 KCalculation: k = 10/5 MsgBox "Värdet på i är" & i & vbNewLine & "Värdet för j är" & j & _ vbNewLine & "Värdet för k är" & k & vbNewLine End Sub
Obs: Här är ”KCalculation” det namn jag gav; Du kan ge ditt eget etikettnamn utan utrymme.

Om jag kör den här kodraden hoppar den inte till nästa rad. Det kommer snarare att hoppa till det namn jag har angett, dvs. "KCalcualtion." Här kommer det att ignorera felet från "I", och det kommer inte att utföra "j" -beräkning, men genast hoppar det till "KCalcualtion."

# 3 - Skriv ut felnummer i VBA

I slutet av koden kan vi också skriva ut felnumret i en separat meddelanderuta. Följande kodrad kommer att göra detta jobb.

Koda:

Felnummer

Nu kommer jag att köra den här koden första meddelandefältet visar beräkningsresultaten.

Klicka på OK. Den visar ytterligare ett meddelandefält för att visa felnumret.

Vi går 11; som ett resultat, dvs Division by Zero.

Vi kan också få felbeskrivningen istället för numret. Vi behöver bara ändra koden. Nedan är koden.

Koda:

Felaktig beskrivning

Det kommer att visa beskrivning så här.

Saker att komma ihåg

  • Efter att ha skrivit in "On Error Resume Next" i slutet av koden, glöm inte att lägga till uttalandet "On Error GoTo 0."
  • Etikettnamnet ska vara detsamma på båda platserna.
  • Etikettnamn behöver inte definieras i god tid.
  • I slutändan, se alltid vad som var felet inträffade genom den separata meddelandefältet.

Intressanta artiklar...