VBA bij fout

Excel VBA On Error-verklaring

VBA On Error- instructie is een type foutafhandelingsmechanisme dat wordt gebruikt om de code te begeleiden om te doen als er een fout optreedt, meestal wanneer een code een fout tegenkomt, stopt de uitvoering, maar met deze instructie in de code wordt de uitvoering van de code gestopt. code gaat verder omdat het een reeks instructies heeft die moeten worden uitgevoerd wanneer er een fout optreedt.

Door te anticiperen op de fout in de code, ben je een professional in VBA-codering. U kunt de code niet 100% efficiënt maken, zelfs als u op de een of andere manier zeker bent van uw code, kan deze een fout opleveren.

Het is bijna een onmogelijke taak om elke soort fout te identificeren en af ​​te handelen, maar we hebben verschillende manieren om een ​​fout in VBA af te handelen. Tijdens het schrijven van de code verwacht u misschien niet welk soort foutcode kan overgeven, maar als er een fout optreedt, zult u meer tijd besteden aan foutopsporing dan aan het schrijven van de code zelf.

Wat is een fout?

Een fout is niets anders dan een regel code kan niet worden uitgevoerd vanwege de functionaliteit of de verkeerde code. Dus probeer de fout te anticiperen en af ​​te handelen.

Als u bijvoorbeeld het blad probeert te verwijderen dat er niet is, kunnen we die regel code natuurlijk niet uitvoeren.

Er zijn drie soorten fouten: één is een gecompileerde fout vanwege niet-gedeclareerde variabelen. De tweede is een gegevensinvoerfout als gevolg van verkeerde invoer door de coder, en de derde is een runtime-fout omdat VBA de coderegel niet kan herkennen. Voor het proberen toegang te krijgen tot of te werken aan een werkblad of werkmap die er niet is.

Maar we hebben een verklaring in VBA om al dit soort fouten af ​​te handelen, dwz de verklaring "On Error".

Typen foutmeldingen

Het belangrijkste punt bij het afhandelen van fouten in VBA is de "On Error" -instructie. Bijvoorbeeld bij fout "hervat volgende regel", "ga naar of spring naar een andere regel", enz ...

On Error-statement heeft drie soorten statements.

  1. GoTo 0  betekent wanneer de runtime-fout optreedt, Excel of VBA moet het foutberichtvenster weergeven met de soort fout die is opgetreden. Zodra VBA de code uitvoert, worden alle foutafhandelaars in dat specifieke blok op de code uitgeschakeld.
  2. Resume Next betekent dat wanneer de fout optreedt, deze instructie de Excel instrueert om die fout te negeren en door te gaan naar (hervat volgende) de volgende regel code zonder foutmeldingen weer te geven. Het betekent niet dat het de fout zal herstellen, maar het negeert de fout gewoon.
  3. GoTo [label] betekent dat wanneer VBA een fout tegenkomt, ga naar het toegewezen label. Hierdoor springt de code naar de specifieke regel die door de coder wordt verstrekt.

Top 3 manieren om fouten in VBA af te handelen

U kunt deze VBA On Error-sjabloon hier downloaden - VBA On Error-sjabloon

# 1 - Bij fout hervatten Volgende

Stel dat u de waarde van 20 deelt door 0 en u hebt de variabele gedeclareerd om het resultaat van de deling eraan toe te wijzen.

Code:

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

Als u deze code uitvoert, wordt de onderstaande fout gegenereerd.

U kunt dus geen enkel getal delen door een nulwaarde. Runtime-foutnummer is 11, dwz delen door nul.

Nu zal ik nog een regel aan de code toevoegen.

Code:

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

Nu zal ik de verklaring On error resume next bovenaan toevoegen.

Code:

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

Als ik deze code uitvoer, krijg ik geen foutmeldingen, maar wordt de volgende regel code uitgevoerd, dwz j = 20/2.

# 2 - Bij fout GoTo-label

Ik heb drie variabelen verklaard.

Code:

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

Voor al deze drie variabelen zal ik een divisieberekening toewijzen.

Code:

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

Het resultaat van al deze drie berekeningen wordt weergegeven in het berichtvenster.

Code:

 Sub OnError_Example1 () Dim i As Integer, j As Integer, k As Integer i = 20/0 j = 20/2 k = 10/5 MsgBox "De waarde van i is" & i & vbNewLine & "De waarde van j is "& j & _ vbNewLine &" De waarde van k is "& k & vbNewLine End Sub 

Nu zal ik proberen deze code uit te voeren, aangezien de berekening van "I" niet juist is, krijgen we run time error 11.

Nu zal ik de instructie "On Error Resume Next" toevoegen.

Code:

 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 "De waarde van i is" & i & vbNewLine & "The waarde van j is "& j & _ vbNewLine &" De waarde van k is "& k & vbNewLine End Sub 

Als ik dit uitvoer, zal het de “I” -berekening overslaan en de resterende twee berekeningen uitvoeren en het resultaat is als volgt.

Nu zal ik in plaats van "On Error Resume Next" "On Error GoTo KCalculation" toevoegen

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 "De waarde van i is" & i & vbNewLine & "De waarde van j is" & j & _ vbNewLine & "De waarde van k is" & k & vbNewLine End Sub 

Opmerking: hier is "KCalculation" de labelnaam die ik had opgegeven, u kunt uw eigen labelnaam geven zonder enige spatie.

Als ik nu deze regel code uitvoer, zal het niet naar de volgende regel springen, maar naar de labelnaam die ik heb ingevoerd, dwz "KCalcualtion". Hier negeert het de fout gegeven door "I" en zal het ook geen "j" berekening uitvoeren, maar het springt meteen naar "KCalcualtion".

# 3 - Foutnummer afdrukken in VBA

Aan het einde van de code kunnen we het foutnummer ook in een apart berichtvenster afdrukken. De volgende regel code zal deze taak uitvoeren.

Code:

Foutnummer

Nu zal ik deze code uitvoeren. Het eerste berichtvenster zal de berekeningsresultaten tonen.

Klik op OK, het zal nog een berichtvenster tonen om het foutnummer te tonen.

We gaan 11 als resultaat, dwz delen door nul.

We kunnen ook de foutbeschrijving krijgen in plaats van het nummer. We hoeven alleen de code te wijzigen, hieronder staat de code.

Code:

Foutbeschrijving

Het zal een beschrijving als deze tonen.

Dingen om te onthouden

  • Na het invoeren van "On Error Resume Next" aan het einde van de code, vergeet dan niet de verklaring "On Error GoTo 0" toe te voegen
  • De labelnaam moet op beide plaatsen hetzelfde zijn.
  • Labelnamen hoeven niet lang van tevoren te worden gedefinieerd.
  • Kijk uiteindelijk altijd wat de fout was die is opgetreden via het afzonderlijke berichtvenster.