Hoe fouten te negeren met VBA On Error Resume Next Statement?

Excel VBA Bij fout hervatten Volgende

VBA On Error Resume Next is een foutafhandelingsverklaring. Als de fout optreedt tijdens het uitvoeren van de code in plaats van een fout weer te geven om de volgende regel code te hervatten door het foutbericht te negeren, kunt u deze instructie gebruiken.

Degenen die regelmatig codes schrijven in Excel VBA weten dat ze zelfs na het schrijven van bekwame codes fouten kunnen krijgen, maar ze willen die fout negeren en doorgaan met de volgende regels code. Een typisch voorbeeld van het krijgen van een foutbericht is wanneer de werkbladfunctie VERT.ZOEKEN de opzoekwaarde niet vindt in de tabelmatrix. Het zal geen # N / A-fout retourneren; het zal eerder de fout werpen. Als "Kan de eigenschap VERT.ZOEKEN van de werkbladfunctieklasse niet ophalen."

Als u niet weet waarom we deze foutmelding krijgen, is het erg moeilijk om de bug op te lossen. In VBA hebben we een functie met de naam ' On Error Resume Next' .

Wat doet On Error Resume Next in VBA?

Er zijn bepaalde gebieden als coder. We zullen zeker weten dat dit een foutmelding geeft, maar we moeten deze fout negeren om door de code te blijven gaan, dus hoe die fout te negeren is de algemene twijfel die iedereen heeft.

Door VBA On Error Resume Next-instructie te gebruiken, kunnen we de fout negeren en de volgende regel code hervatten.

Voorbeeld 1

Stel dat u veel werkbladen heeft en dat u er enkele verbergt als onderdeel van het VBA-project. Hieronder staan ​​bijvoorbeeld de werkbladen die ik in mijn werkblad heb.

Ik heb codes geschreven om "Verkoop &" Winst "-bladen te verbergen, en hieronder staat de code.

Code:

Sub On_Error () Worksheets ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Nu begin ik de code regel voor regel uit te voeren met behulp van de F8- toets.

Als ik nog een keer op de F8- toets druk , wordt het blad met de naam ' Verkoop ' verborgen .

Druk nu nog een keer op de F8-toets en kijk wat er gebeurt.

We hebben de foutmelding "Abonnement buiten bereik" omdat de huidige regel code het onderstaande zegt.

Werkbladen ("Profit 2019"). Zichtbaar = xlVeryHidden

Het probeert het werkblad met de naam " Profit 2019 " te verbergen , maar er is geen werkblad met de naam "Profit 2019".

Als het werkblad in deze gevallen niet in de werkmap bestaat, moeten we de fout negeren en doorgaan met het uitvoeren van de code door de fout 'Subscript buiten bereik' te negeren.

De volgende regel in de code zegt

Werkbladen ("Winst"). Visible = xlVeryHidden

Dit werkblad bestaat in deze werkmap, dus zonder de fout te negeren, kunnen we niet naar deze regel code gaan.

Om deze fout te negeren, moeten we de instructie "On Error Resume Next" toevoegen.

Code:

Sub On_Error () Bij fout Hervat volgende werkbladen ("Sales"). Visible = xlVeryHidden Worksheets ("Profit 2019"). Visible = xlVeryHidden Worksheets ("Profit"). Visible = xlVeryHidden End Sub

Zoals je hierboven kunt zien, heb ik de instructie bovenaan de code toegevoegd voordat een van de regels begint. Voer nu de code uit en kijk wat er gebeurt.

Nu ben ik in de regel die eerder de fout kreeg, druk op de F8-toets en kijk wat er gebeurt.

Ik ben naar de volgende regel code gesprongen zonder enige fout te tonen vanwege de verklaring die we bovenaan hebben toegevoegd, namelijk "On Error Resume Next" VBA-instructie.

Voorbeeld 2

Nu zullen we zien hoe we deze verklaring kunnen gebruiken met nog een voorbeeld. Bekijk de onderstaande datastructuur voor dit voorbeeld.

We hebben twee tabellen boven de eerste tabel met Emp Name en hun salarisgegevens in de tweede tabel, en we hebben alleen Emp Name, dus door VERT.ZOEKEN te gebruiken, moeten we de salarisgegevens ophalen van de linkerzijtabel.

Hieronder staat de code die ik had geschreven om de details op te halen.

Code:

Sub On_Error1 () Dim k As Long For k = 2 tot 8 cellen (k, 6) .Value = WorksheetFunction.VLookup (Cells (k, 5), Range ("A: B"), 2, 0) Volgende k End Sub

Voer nu de code regel voor regel uit en kijk wat er gebeurt.

Bij het uitvoeren van de eerste celcode hebben we het resultaat voor de eerste medewerker. Herhaal hetzelfde ook voor de tweede werknemer.

Deze keer hebben we de foutmelding. Laten we eens kijken naar de tweede werknemersnaam in de tabel.

The second employee name is “Gayathri,” but this name doesn’t not exists in the first table, so the VBA VLOOKUP function doesn’t return “#N/A” error when the VLOOKUP doesn’t find the lookup value from the table; rather, it gives the above error message.

Our aim is if the employee name doesn’t find in the table, then we need an empty cell for that employee and ignore the error and give results for the remaining names.

We need to add the “On Error Resume Next” statement inside the loop.

Code:

Sub On_Error1() Dim k As Long For k = 2 To 8 On Error Resume Next Cells(k, 6).Value = WorksheetFunction.VLookup(Cells(k, 5), Range("A:B"), 2, 0) Next k End Sub

Now run the code and see the result.

Twee namen van werknemers, ‘ Gayathri & Karanveer’, staan ​​niet op de lijst, dus die regelcodes moeten een fout zijn opgetreden, aangezien we een foutafhandelingsverklaring hebben toegevoegd: ‘ Bij fout hervatten volgende ’, het heeft die regel met code genegeerd en hervat voor de volgende werknemer.

Dingen om hier te onthouden

  • "On Error Resume Next" is de foutafhandelingsinstructie wanneer we de bekende fout moeten negeren.
  • Als u de foutmelding alleen voor een specifieke set code wilt negeren, sluit dan de volgende instructie bij fout hervatten door de instructie " On Error GoTo 0 " toe te voegen .

Interessante artikelen...