Excel VBA -felhantering - allt du behöver veta!

Oavsett hur erfaren du är av VBA -kodning kommer fel alltid att vara en del av det.

Skillnaden mellan en nybörjare och en expert VBA -programmerare är att expertprogrammerarna vet hur man effektivt hanterar och använder fel.

I denna handledning kommer jag att visa dig olika sätt du kan använda för att hantera fel effektivt i Excel VBA.

Innan vi går in på VBA -felhantering, låt oss först förstå de olika typerna av fel du sannolikt kommer att stöta på när du programmerar i Excel VBA.

Typer av VBA -fel i Excel

Det finns fyra typer av fel i Excel VBA:

  1. Syntaxfel
  2. Sammanställningsfel
  3. Körtidsfel
  4. Logiska fel

Låt oss snabbt förstå vad dessa fel är och när du sannolikt kommer att stöta på dessa.

Syntaxfel

Ett syntaxfel, som namnet antyder, uppstår när VBA hittar något fel med syntaxen i koden.

Till exempel, om du glömmer en del av satsen/syntaxen som behövs, ser du kompileringsfelet.

I koden nedan, så snart jag trycker på enter efter den andra raden, ser jag ett kompileringsfel. Detta beror på att IF -uttalande måste ha 'Sedan'Kommando, som saknas i koden nedan.

Notera: När du skriver en kod i Excel VBA söker den efter varje mening så snart du trycker på enter. Om VBA upptäcker att något saknas i syntaxen visar det omedelbart ett meddelande med lite text som kan hjälpa dig att förstå den saknade delen.

För att du ska se syntaxfelet när det saknas något måste du se till att Autosyntax -kontroll är aktiverad. För att göra detta, klicka på "Verktyg" och klicka sedan på "Alternativ". Kontrollera i alternativdialogrutan att alternativet "Automatisk syntaxcheck" är aktiverat.

Om alternativet "Automatisk syntaxcheck" är inaktiverat, markerar VBA fortfarande raden med syntaxfelet i rött, men det visar inte feldialogrutan.

Kompileringsfel

Kompileringsfel uppstår när något saknas som behövs för att koden ska köras.

Till exempel, i nedanstående kod, så snart jag försöker köra koden, kommer det att visa följande fel. Detta händer när jag har använt IF Then -uttalandet utan att stänga det med det obligatoriska 'End If'.

Ett syntaxfel är också en typ av kompileringsfel. Ett syntaxfel uppstår så snart du trycker på enter och VBA identifierar att något saknas. Ett kompileringsfel kan också uppstå när VBA inte hittar något som saknas när du skriver koden, men det gör det när koden kompileras eller körs.

VBA kontrollerar varje rad när du skriver koden och markerar syntaxfelet så snart raden är felaktig och du trycker på enter. Kompileringsfel å andra sidan identifieras bara när hela koden analyseras av VBA.

Nedan följer några scenarier där du kommer att stöta på kompileringsfelet:

  1. Använda ett IF -uttalande utan Slut -IF
  2. Använda För -uttalande med nästa
  3. Använda Select -sats utan att använda End Select
  4. Deklarerar inte variabeln (detta fungerar bara när Option Explicit är aktiverat)
  5. Anropa en sub/funktion som inte finns (eller med fel parametrar)
Notera om 'Alternativ Explicit': När du lägger till ‘Option Explicit’ måste du deklarera alla variabler innan du kör koden. Om det finns någon variabel som inte har deklarerats visar VBA ett fel. Detta är en bra metod eftersom det visar ett fel om du har en felstavad variabel. Du kan läsa mer om Option Explicit här.

Körtid fel

Körtidsfel är de som uppstår när koden körs.

Körtidsfel uppstår endast när alla syntax- och kompileringsfel tas om hand.

Till exempel, om du kör kod som ska öppna en Excel -arbetsbok, men arbetsboken inte är tillgänglig (antingen raderad eller namnet ändrat), skulle din kod ge dig ett körtidsfel.

När ett körtidsfel uppstår kommer det att stoppa koden och visa dig dialogrutan för fel.

Meddelandet i dialogrutan Run-time error är lite mer användbart. Den försöker förklara problemet som kan hjälpa dig att rätta till det.

Om du klickar på Debug -knappen markeras den del av koden som leder till felet.

Om du har rättat till felet kan du klicka på knappen Kör i verktygsfältet (eller trycka på F5) för att fortsätta köra koden varifrån den lämnade.

Eller så kan du också klicka på Avsluta -knappen för att komma ur koden.

Viktig: Om du klickar på Avsluta -knappen i dialogrutan stoppas koden vid raden där den påträffas. Alla koderader innan dess skulle dock ha körts.

Logiska fel

Logiska fel skulle inte få din kod att stanna men kan leda till fel resultat. Dessa kan också vara de svåraste typerna av fel att felsöka.

Dessa fel markeras inte av kompilatorn och måste hanteras manuellt.

Ett exempel på logiska fel (som jag ofta fastnar i) är att springa in i en oändlig slinga.

Ett annat exempel kan vara när det ger ett felaktigt resultat. Du kan till exempel använda en fel variabel i koden eller lägga till två variabler där den ena är felaktig.

Det finns några sätt jag använder för att hantera logiska fel:

  1. Infoga meddelanderuta någonstans i koden och markera värden/data som kan hjälpa dig att förstå om allt går som förväntat.
  2. Istället för att köra koden på en gång, gå igenom varje rad en efter en. För att göra detta, klicka var som helst i koden och tryck på F8. du skulle märka att varje gång du trycker på F8 körs en rad. Detta gör att du kan gå igenom koden en rad i taget och identifiera de logiska felen.

Använda felsökning för att hitta kompilerings-/syntaxfel

När du är klar med koden är det bra att först kompilera den innan du kör.

För att kompilera en kod, klicka på alternativet Debug i verktygsfältet och klicka på Compile VBAProject.

När du sammanställer ett VBA -projekt går det igenom koden och identifierar fel (om sådana finns).

Om det hittar ett fel visas en dialogruta med felet. Det hittar fel ett efter ett. Så om det hittar ett fel och du har korrigerat det, måste du köra kompilera igen för att hitta andra fel (om det finns).

När din kod är fri från fel blir alternativet Kompilera VBAProject nedtonat.

Observera att kompilering bara hittar "Syntax" -fel och "Kompilera" -fel. Det hittar INTE körtidsfelen.

När du skriver VBA -kod vill du inte att felen dyker upp. För att undvika detta finns det många felhanteringsmetoder du kan använda.

I de närmaste avsnitten i den här artikeln kommer jag att täcka de metoder du kan använda för VBA -felhantering i Excel.

Konfigurera felinställningar (hanterade mot obehandlade fel)

Innan du börjar arbeta med din kod måste du leta efter en inställning i Excel VBA.

Gå till VBA -verktygsfältet och klicka på Verktyg och klicka sedan på Alternativ.

I dialogrutan Alternativ klickar du på fliken Allmänt och ser till att "Avbrott vid obehandlade fel" i gruppen "Felinställning" är markerat.

Låt mig förklara de tre alternativen:

  1. Bryt på alla fel: Detta stoppar din kod för alla typer av fel, även när du har använt teknikerna för att hantera dessa fel.
  2. Break in Class -modul: Detta kommer att stoppa din kod för alla fel som inte hanteras, och samtidigt, om du använder objekt som användarformulär, kommer den också att brytas in i dessa objekt och markera den exakta raden som orsakar felet.
  3. Bryt på ohandterade fel: Detta stoppar din kod endast för de fel som inte hanteras. Detta är standardinställningen eftersom det säkerställer att alla hanterade fel meddelas dig. Om du använder objekt som Userforms markerar detta inte raden som orsakar felet i objektet, utan markerar bara raden som hänvisar till det objektet.
Notera: Om du arbetar med objekt som användarformulär kan du ändra denna inställning till "Bryt på klassmoduler". Skillnaden mellan #2 och #3 är att när du använder Break in Class Module tar det dig till den specifika raden i objektet som orsakar felet. Du kan också välja att gå med det här istället för "Bryt på obehandlade fel".

Så i ett nötskal - om du precis har börjat med Excel VBA, se till att "Avbrott på obehandlade fel" är markerat.

VBA -felhantering med "On Error" -uttalanden

När din kod stöter på ett fel finns det några saker du kan göra:

  1. Ignorera felet och låt koden fortsätta
  2. Ha en felhanteringskod på plats och kör den när ett fel uppstår

Båda dessa felhanteringsmetoder säkerställer att slutanvändaren inte får se ett fel.

Det finns några "On Error" -uttalanden som du kan använda för att få detta gjort.

Vid fel Återuppta nästa

När du använder "On Error Resume Next" i din kod ignoreras eventuella fel och koden fortsätter att köras.

Denna felhanteringsmetod används ganska ofta, men du måste vara försiktig när du använder den. Eftersom det helt ignorerar alla fel som kan uppstå, kanske du inte kan identifiera de fel som behöver korrigeras.

Till exempel, om koden nedan körs, kommer den att returnera ett fel.

Sub AssignValues ​​() x = 20/4 y = 30/0 End End Sub

Detta händer eftersom du inte kan dela ett tal med noll.

Men om jag använder "On Error Resume Next" -uttalandet i den här koden (som visas nedan) kommer det att ignorera felet och jag vet inte att det finns ett problem som måste korrigeras.

Sub AssignValues ​​() Vid fel Återuppta Nästa x = 20 /4 y = 30 /0 Avsluta Sub

On Error Resume Next ska endast användas när du tydligt vet vilken typ av fel din VBA -kod förväntas kasta och det är okej att ignorera det.

Till exempel nedan är VBA -händelsekoden som direkt skulle lägga till datum- och tidsvärdet i cell A1 på ett nyligen infogat blad (den här koden läggs till i kalkylbladet och inte i en modul).

Private Sub Workbook_NewSheet (ByVal Sh As Object) Sh.Range ("A1") = Format (Nu, "dd-mmm-åååå hh: mm: ss") End Sub

Även om detta fungerar bra i de flesta fall, skulle det visa ett fel om jag lägger till ett diagramark istället för ett kalkylblad. Eftersom ett diagramark inte har celler skulle koden ge ett fel.

Så om jag använder uttalandet "On Error Resume Next" i den här koden fungerar det som förväntat med kalkylblad och gör ingenting med diagramark.

Private Sub Workbook_NewSheet (ByVal Sh As Object) On Error Resume Next Sh.Range ("A1") = Format (Now, "dd-mmm-yyyy hh: mm: ss") End Sub

Obs: Vid fel Återuppta Nästa uttalande används bäst när du vet vilken typ av fel du sannolikt kommer att stöta på. Och om du tycker att det är säkert att ignorera dessa fel kan du använda det.

Du kan ta denna kod till nästa nivå genom att analysera om det fanns ett fel och visa ett relevant meddelande för det.

Koden nedan visar en meddelanderuta som informerar användaren om att ett kalkylblad inte har infogats.

Private Sub Workbook_NewSheet (ByVal Sh As Object) On Error Resume Next Sh.Range ("A1") = Format (Nu, "dd-mmm-åååå hh: mm: ss") Om Err.Number 0 Då ser MsgBox "ut som dig infogade ett diagramark "& vbCrLf &" Error - "& Err.Description End If End Sub

"Err.Number" används för att få felnumret och "Err.Description" används för att få felbeskrivningen. Dessa kommer att täckas senare i denna handledning.

Vid fel GoTo 0

"On Error GoTo 0" stoppar koden på raden som orsakar felet och visar en meddelanderuta som beskriver felet.

Enkelt uttryckt möjliggör det standardfelkontrollbeteende och visar standardfelmeddelandet.

Varför ens använda den då?

Normalt behöver du inte använda 'On Error Goto 0', men det kan vara användbart när du använder det tillsammans med 'On Error Resume Next'

Låt mig förklara!

Koden nedan markerar alla tomma celler i markeringen.

Sub SelectFormulaCells () Selection.SpecialCells (xlCellTypeBlanks) .Välj End Sub

Men det skulle visa ett fel när det inte finns några tomma celler i de valda cellerna.

Så för att undvika att visa felet kan du använda On Error Resume next '

Nu kommer det också att visa eventuella fel när du kör koden nedan:

Sub SelectFormulaCells () Vid fel Återuppta nästa Selection.SpecialCells (xlCellTypeBlanks) .Välj End Sub

Än så länge är allt bra!

Problemet uppstår när det finns en del av koden där fel kan uppstå, och eftersom du använder "On Error Resume Next", skulle koden helt enkelt ignorera den och gå till nästa rad.

Till exempel, i koden nedan, skulle det inte finnas någon felmeddelande:

Sub SelectFormulaCells () Vid fel Återuppta nästa Selection.SpecialCells (xlCellTypeBlanks) .Välj '… mer kod som kan innehålla fel Slut Sub

I koden ovan finns det två platser där ett fel kan uppstå. Den första platsen är där vi markerar alla tomma celler (med hjälp av Selection.SpecialCells) och den andra är i den återstående koden.

Medan det första felet förväntas är det inte något fel efter det.

Det är här On Error Goto 0 kommer till undsättning.

När du använder den återställer du felinställningen till standard, där den börjar visa fel när den stöter på den.

Till exempel, i koden nedan, skulle det inte finnas något fel om det inte finns några tomma celler, men det skulle finnas en felmeddelande på grund av '10/0 '

Sub SelectFormulaCells () Vid fel Återuppta nästa urval.SpecialCells (xlCellTypeBlanks) .Välj Vid fel Gå till 0 '… mer kod som kan innehålla fel Avsluta sub

Vid fel Gå till [Etikett]

De två ovanstående metoderna - "Vid fel Återuppta nästa" och "Vid fel Gå till 0" - tillåter oss inte att hantera felet på riktigt. Den ena får koden att ignorera felet och den andra återupptar felkontrollen.

On Error Go [Etikett] är ett sätt som du kan ange vad du vill göra om din kod har ett fel.

Nedan finns kodstrukturen som använder denna felhanterare:

Deltest () Vid fel Gå till etikett: X = 10 /0 'den här raden orsakar ett fel' … din återstående kod går här Avsluta underetikett: 'kod för att hantera felet Avsluta sub

Observera att före Fel hantering av "Etikett" finns det en Exit Sub. Detta säkerställer att om det inte finns några fel, avslutas suben och "Etikett" -koden körs inte. Om du inte använder Exit Sub kommer den alltid att köra "Etikett" -koden.

I exempelkoden nedan, när ett fel uppstår, hoppar koden och kör koden i hanterarsektionen (och visar en meddelanderuta).

Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det verkar finnas ett fel" & vbCrLf & Err.Description End Sub

Observera att när ett fel uppstår har koden redan körts och kört raderna innan raden orsakar felet. I exemplet ovan anger koden värdet för X som 12, men eftersom felet inträffar på nästa rad anger det inte värdena för Y och Z.

När koden hoppar till felhanteringskoden (ErrMsg i det här exemplet) fortsätter den att köra alla rader i och under felhanteringskoden och avsluta suben.

Vid fel Gå till -1

Den här är lite komplicerad, och i de flesta fall är det osannolikt att du använder den.

Men jag kommer fortfarande att täcka detta eftersom jag har mött en situation där detta behövdes (ignorera gärna och hoppa till nästa avsnitt om du bara letar efter grunderna).

Innan jag går in på mekaniken i det, låt mig försöka förklara var det kan vara användbart.

Anta att du har en kod där ett fel uppstår. Men allt är bra eftersom du har en felhanterare på plats. Men vad händer när det finns ett annat fel i felhanteringskoden (ja … ungefär som startfilmen).

I ett sådant fall kan du inte använda den andra hanteraren eftersom det första felet inte har rensats. Så medan du har hanterat det första felet finns det fortfarande i VBA: s minne. Och VBA -minnet har bara plats för ett fel - inte två eller fler än så.

I det här scenariot kan du använda On Error Goto -1.

Det rensar felet och frigör VBA -minne för att hantera nästa fel.

Nog prat!

Låt mig förklara nu med hjälp av exempel.

Antag att jag har koden nedan. Detta kommer att kasta ett fel eftersom det är division med noll.

Sub Errorhandler () X = 12 Y = 20 /0 Z = 30 End Sub

Så för att hantera det använder jag en felhanteringskod (med namnet ErrMsg) enligt nedan:

Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det verkar finnas ett fel" & vbCrLf & Err.Description End Sub

Allt är bra nu igen. Så snart felet uppstår används felhanteraren och visar en meddelanderuta som visas nedan.

Nu utökar jag koden så att jag har mer kod i eller efter felhanteraren.

Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det verkar finnas ett fel" & vbCrLf & Err.Description A = 10 /2 B = 35 /0 End Sub

Eftersom det första felet har hanterats men det andra inte har varit, ser jag igen ett fel som visas nedan.

Fortfarande allt bra. Koden beter sig på det sätt vi hade förväntat oss.

Så för att hantera det andra felet använder jag en annan felhanterare (ErrMsg2).

Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det verkar finnas ett fel" & vbCrLf & Err.Description On Error GoTo ErrMsg2 A = 10 /2 B = 35 / 0 Exit Sub ErrMsg2: MsgBox "Det verkar finnas ett fel igen" & vbCrLf & Err.Description End Sub

Och det är här det är fungerar inte som förväntat.

Om du kör ovanstående kod kommer det fortfarande att ge dig ett körtidsfel, även efter att den andra felhanteraren är på plats.

Detta händer eftersom vi inte rensade det första felet från VBA: s minne.

Ja, vi klarade det! Men det finns fortfarande kvar i minnet.

Och när VBA stöter på ett annat fel, fastnar det fortfarande med det första felet, och därför används inte det andra felhanteraren. Koden stannar vid raden som orsakade felet och visar felmeddelandet.

För att rensa VBA: s minne och rensa det tidigare felet måste du använda "On Error Goto -1".

Så om du lägger till den här raden i koden nedan och kör den, fungerar den som förväntat.

Sub Errorhandler () On Error GoTo ErrMsg X = 12 Y = 20 /0 Z = 30 Exit Sub ErrMsg: MsgBox "Det verkar finnas ett fel" & vbCrLf & Err.Description On Error GoTo -1 On Error GoTo ErrMsg2 A = 10 / 2 B = 35 /0 Exit Sub ErrMsg2: MsgBox "Det verkar finnas ett fel igen" & vbCrLf & Err.Description End Sub
Notera: Felet rensas automatiskt när en underrutin slutar.Så, 'On Error Goto -1' kan vara användbart när du får två eller fler än två fel i samma delprogram.

Err -objektet

När ett fel uppstår med en kod är det Err -objektet som används för att få detaljer om felet (till exempel felnummer eller beskrivning).

Err Object Properties

Err -objektet har följande egenskaper:

Fast egendom Beskrivning
siffra Ett tal som representerar typen av fel. När det inte finns något fel är detta värde 0
Beskrivning En kort beskrivning av felet
Källa Projektnamn där felet uppstod
HelpContext Hjälpkontext -id för felet i hjälpfilen
HelpFile En sträng som representerar mappplatsen och filnamnet på hjälpfilen

Även om du i de flesta fall inte behöver använda Err -objekt kan det ibland vara användbart när du hanterar fel i Excel.

Anta till exempel att du har en datamängd som visas nedan och för varje nummer i markeringen vill du beräkna kvadratroten i den intilliggande cellen.

Koden nedan kan göra det, men eftersom det finns en textsträng i cell A5, visar det ett fel så snart detta inträffar.

Sub FindSqrRoot () Dim rng As Range Set rng = Selection For each cell In rng cell.Offset (0, 1) .Value = Sqr (cell.Value) Next cell End Sub

Problemet med denna typ av felmeddelande är att det inte ger dig något om vad som har gått fel och var problemet uppstod.

Du kan använda Err -objektet för att göra dessa felmeddelanden mer meningsfulla.

Till exempel, om jag nu använder nedanstående VBA -kod, kommer den att stoppa koden så snart felet uppstår och visa en meddelanderuta med celladressen till cellen där det finns ett problem.

Sub FindSqrRoot () Dim rng As Range Set rng = Selection For each cell In rng On Error GoTo ErrHandler cell.Offset (0, 1) .Value = Sqr (cell.Value) Next cell ErrHandler: MsgBox "Felnummer:" & Err .Number & vbCrLf & _ "Error Description:" & Err.Description & vbCrLf & _ "Error at:" & cell.Address End Sub

Ovanstående kod skulle ge dig mycket mer information än den enkla "Type Mismatch", särskilt celladressen så att du vet var felet uppstod.

Du kan förfina denna kod ytterligare för att se till att din kod körs till slutet (i stället för att bryta vid varje fel) och ger dig sedan en lista med celladress där felet uppstår.

Koden nedan skulle göra detta:

Sub FindSqrRoot2 () Dim ErrorCells As String Dim rng As Range On Error Resume Next Set rng = Selection For each cell In rng cell.Offset (0, 1) .Value = Sqr (cell.Value) If Err.Number 0 Then ErrorCells = ErrorCells & vbCrLf & cell.Address On Error GoTo -1 End If Next cell MsgBox "Error in the following cells" & ErrorCells Exit Sub End Sub Sub

Ovanstående kod körs till slutet och ger kvadratroten för alla celler som har tal i den (i den intilliggande kolumnen). Det visar sedan ett meddelande som listar alla celler där det uppstod ett fel (som visas nedan):

Err Object Methods

Medan Err -egenskaperna är användbara för att visa användbar information om felen, finns det också två Err -metoder som kan hjälpa dig med felhantering.

Metod Beskrivning
Klar Rensar alla fastighetsinställningar för Err -objektet
Höja Genererar ett körtidsfel

Låt oss snabbt lära oss vad dessa är och hur/varför man använder dem med VBA i Excel.

Err Clear Method

Anta att du har en dataset som visas nedan och du vill få kvadratroten för alla dessa nummer i den intilliggande kolumnen.

Följande kod kommer att få kvadratrötterna för alla siffror i den intilliggande kolumnen och visa ett meddelande om att ett fel uppstod för cell A5 och A9 (eftersom dessa har text i den).

Sub FindSqrRoot2 () Dim ErrorCells As String Dim rng As Range On Error Resume Next Set rng = Selection For each cell In rng cell.Offset (0, 1) .Value = Sqr (cell.Value) If Err.Number 0 Then ErrorCells = ErrorCells & vbCrLf & cell.Address Err.Clear End If Next cell MsgBox "Fel i följande celler" & ErrorCells End Sub

Observera att jag har använt Err.Clear -metoden inom If Then -satsen.

När ett fel har inträffat och fångats av If -villkoret, återställer Err.Clear -metoden felnumret till 0. Detta säkerställer att IF -tillståndet bara fäller felen för celler där det höjs.

Hade jag inte använt Err.Clear -metoden, när felet uppstår, skulle det alltid vara sant i IF -tillståndet och felnumret har inte återställts.

Ett annat sätt att få detta att fungera är att använda On Error Goto -1, som återställer felet helt.

Notera: Err.Clear skiljer sig från On Error Goto -1. Err.Clear rensar bara felbeskrivningen och felnumret. det återställer det inte helt. Detta betyder att om det finns en annan felinstans i samma kod, kommer du inte att kunna hantera den innan du återställer den (vilket kan göras med 'On Error Goto -1' och inte med 'Err.Clear').

Err Raise -metod

Med Err.Raise-metoden kan du ta upp ett körtidsfel.

Nedan är syntaxen för att använda Err.Raise -metoden:

Err.Raise [nummer], [källa], [beskrivning], [hjälpfil], [hjälpkontext]

Alla dessa argument är valfria och du kan använda dessa för att göra ditt felmeddelande mer meningsfullt.

Men varför skulle du någonsin vilja ta upp ett fel själv?

Bra fråga!

Du kan använda den här metoden när det finns en förekomst av ett fel (vilket innebär att det blir ett fel ändå) och sedan använder du den här metoden för att berätta för användaren mer om felet (istället för det mindre användbara felmeddelandet som VBA visar som standard).

Anta till exempel att du har en dataset som visas nedan och att du vill att alla celler bara ska ha numeriska värden.

Sub RaiseError () Dim rng As Range Set rng = Selection On Error GoTo ErrHandler för varje cell i rng If Not (IsNumeric (Cell.Value)) Då Err.Raise vbObjectError + 513, Cell.Address, "Inte ett nummer", " Test.html "End If Next Cell ErrHandler: MsgBox Err.Description & vbCrLf & Err.HelpFile End Sub

Ovanstående kod skulle visa ett felmeddelande som har den angivna beskrivningen och kontextfilen.

Personligen har jag aldrig använt Err.Raise eftersom jag mest bara arbetar med Excel. Men för någon som använder VBA för att arbeta med Excel tillsammans med andra program som Outlook, Word eller PowerPoint kan detta vara användbart.

Här är en detaljerad artikel om Err.Raise -metod om du vill lära dig mer.

VBA -hantering av bästa praxis

Oavsett hur skicklig du får en skrivande VBA -kod kommer fel alltid att vara en del av det. De bästa kodarna är de som har kompetensen att hantera dessa fel korrekt.

Här är några bästa metoder du kan använda när det gäller felhantering i Excel VBA.

  1. Använd "On Error Go [Label]" i början av koden. Detta kommer att se till att eventuella fel som kan hända därifrån hanteras.
  2. Använd ENDAST "Vid fel Återuppta nästa" när du är säker på de fel som kan uppstå. Använd den endast med förväntat fel. Om du använder det med oväntade fel kommer det helt enkelt att ignorera det och gå vidare. Du kan använda "On Error Resume Next" med "Err.Raise" om du vill ignorera en viss typ av fel och fånga resten.
  3. När du använder felhanterare, se till att du använder Exit Sub före hanterarna. Detta säkerställer att felhanteringskoden körs endast när det finns ett fel (annars körs det alltid).
  4. Använd flera felhanterare för att fånga upp olika typer av fel. Att ha flera felhanterare säkerställer att ett fel åtgärdas korrekt. Till exempel vill du hantera ett "typmatchning" -fel annorlunda än ett "Delning med 0" körtidsfel.

Hoppas du tyckte att den här Excel -artikeln var användbar!

Här är några fler Excel VBA -självstudier som du kanske gillar:

  • Excel VBA -datatyper - En komplett guide
  • Excel VBA -slingor - För nästa, gör medan, gör tills, för varje
  • Excel VBA -evenemang - En enkel (och komplett) guide
  • Excel Visual Basic Editor - Hur man öppnar och använder det i Excel

Du kommer att bidra till utvecklingen av webbplatsen, dela sidan med dina vänner

wave wave wave wave wave