Inhoudsopgave
In Microsoft Excel VBA is foutverwerking een van de kritieke taken. Als u een programmeur bent, kent u het belang van foutverwerking om een perfecte toepassing te bouwen. Elke blunder in een verklaring kan uw VBA-code op vele manieren belemmeren. U moet dus voorzichtig zijn om deze fouten te behandelen tijdens het uitvoeren van een VBA-code. Er zijn veel run-time fouten die u kunt tegenkomen tijdens het gebruik van de VBA-code in Excel. Om op te losseneen van hen, gebruiken we de Bij fout Hervat Volgende verklaring.
In deze tutorial leer je de Bij fout Hervat Volgende Deze handleiding zal de juiste voorbeelden en illustraties bevatten, dus blijf bij ons.
Download Praktijk Werkboek
VBA bij fout hervat volgende.xlsm
Foutafhandeling in Excel VBA
Wanneer u met Microsoft Excel VBA werkt, krijgt u te maken met veel fouten in uw sub-procedure. Wanneer VBA een statement niet kan uitvoeren, gooit het een run-time error.
Excel behandelt deze fouten automatisch, dus wanneer een run-time fout optreedt, wordt een standaard foutmelding weergegeven zoals de volgende:
Nu kunt u deze op verschillende manieren aanpakken met enkele VBA-statements. Ik zal ze later bespreken.
Lees meer: Hoe repareren #REF! fout in Excel (6 oplossingen)
Foutmeldingen in VBA
Om run time errors af te handelen, instrueren we Excel met het On Error statement. Het bepaalt wat voor soort bewerkingen we daarna onmiddellijk willen doen. In principe schakelen we deze fouten uit door dit soort foutafhandeling.
Wij gebruiken drie soorten On Error statements (syntaxis) in Excel VBA.
- Bij fout Ga naar lijn
- Bij fout Hervat Volgende
- Bij fout Ga naar 0
Als u een fout vindt, gebruikt u het commando Op fout. Want als u geen gebruik maakt van een Op fout verklaring, zullen die run-time fouten rampzalig zijn. Het zal een foutmelding tonen en de uitvoering stoppen.
Wanneer we een Op fout statement, schakelen we een "ingeschakelde" error handler in. De "actieve" error handler is een ingeschakelde handler die de foutafhandeling start. Als er een fout optreedt terwijl er een error handler bij betrokken is, kan de error handler van de huidige methode de fout niet verdragen. Daarna keert de controle terug naar de aanroepende procedure.
Als het aanroepende proces een ingeschakelde error handler heeft, wordt deze ingeschakeld om de fout af te handelen. Als de error handler van het aanroepende systeem overeenkomstig is ingeschakeld, geeft de controle terug via eerdere aanroepende procedures totdat het een ingeschakelde maar inactieve error handler vindt. Als het geen inactieve ingeschakelde error handler kan vinden, betekent dit dat de fout catastrofaal is op het punt waar hij optreedt.
Telkens wanneer de foutafhandelaar het gezag teruggeeft aan een aanroepende procedure, ontwikkelt die procedure de bestaande procedure. De uitvoering begint opnieuw in de huidige procedure op het door de CV statement wanneer een error handler fouten afhandelt in een procedure.
'Bij fout volgende hervatten' in VBA
Nu, de Bij fout Hervat Volgende Het statement vertelt VBA om regels code met fouten te negeren en direct door te gaan naar de volgende regel code. Daarna zal de Excel VBA code de regel of regels met fouten overslaan en doorgaan naar de volgende reeks code.
De Bij fout Hervat Volgende statement dwingt de uitvoering te hervatten met het commando dat onmiddellijk volgt op de regel code die de runtime error veroorzaakte. Deze statement maakt het mogelijk een uitvoering over te slaan, zelfs als er een runtime error is. Als u denkt dat een bepaalde regel code een error kan veroorzaken, plaats dan de routine voor foutafhandeling daar in plaats van op een andere plaats binnen de procedure. De Bij fout Hervat Volgende statement inactief wordt wanneer je code een andere procedure aanroept. Dus, wanneer je een aangepaste foutafhandeling in die routine nodig hebt, moet je een Bij fout Hervat Volgende commando in elk genoemd patroon.
Het is redelijk als de regel code die u kunt overslaan niet noodzakelijk is voor het goed functioneren van de macro. Maar vergeet niet dat het schadelijk kan zijn als u het verkeerd gebruikt, omdat het onbedoelde resultaten kan opleveren.
Denk eraan:
Het On Error Resume Next statement lost de runtime errors niet op. Het negeert in principe de fouten waarbij uw VB-uitvoering wordt hervat vanaf het statement dat de runtime error heeft gegenereerd.
Kijk eens naar de volgende code:
Sub delen() MsgBox 5 / 0 MsgBox 5 / 2 Einde Sub
We hebben geprobeerd om 5 te delen door 0 en 1. Laten we de code uitvoeren. Het toont de volgende uitvoer:
Het geeft een run-time error. We kunnen een getal niet delen door 0. Als je de code debugt, zie je het volgende:
Wanneer het VB-programma een fout vindt, stopt het onmiddellijk de procedure. Het voert de volgende regel niet uit.
Laten we nu de Bij fout Hervat Volgende verklaring voor de foutmelding:
Sub delen() Op fout Hervat Volgende MsgBox 5 / 0 MsgBox 5 / 2 Einde Sub
Na het uitvoeren van de code ziet u het volgende:
Zoals u kunt zien, negeert VBA de regel die de fout oplevert en gaat direct door naar de volgende regel code. Op deze manier kunt u de Bij fout Hervat Volgende verklaring om de fout in Excel VBA af te handelen.
Voorbeelden van 'On Error Resume Next' in VBA
In de volgende punten geef ik u twee voorbeelden van de Bij fout Hervat Volgende verklaringen die u kunt implementeren in uw Excel-werkblad met behulp van VBA. Ik raad u aan deze allemaal te leren en toe te passen in uw werkmap. Het zal uw Excel-kennis zeker vergroten.
1. 'On Error Resume Next'-verklaring om werkbladen te verbergen
In dit voorbeeld laat ik u een VBA-code zien die alle werkbladen van uw actieve werkmap verbergt.
Kijk eens naar het volgende screenshot:
Hier hebben we vier werkbladen. We zullen ze allemaal verbergen met de volgende VBA-code:
Sub hide_all_sheets() Dim copies As Worksheet For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
Wanneer u de volgende code uitvoert, ziet u de volgende run-time error:
Excel toont deze foutmelding omdat je niet alle bladen in een werkmap kunt verbergen. Je moet de foutmelding dus negeren. Daartoe moet je het On Error Resume Next statement implementeren in je regel code.
Sub hide_all_sheets() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies End Sub
Na de uitvoering van de VBA-code ziet u de volgende uitvoer:
Uiteindelijk zie je geen fouten na uitvoering. Dus onze On Error Resume Next verklaring werkte prima in de VBA-code.
Lees meer: Fouten in Excel en hun betekenis (15 verschillende fouten)
2. VLOOKUP-functie met 'On Error Resume Next' in VBA
In dit voorbeeld laat ik een voorbeeld zien van de VLOOKUP-functie in VBA Nu bevat deze VBA-code ook de Bij fout Hervat Volgende verklaring.
Kijk eens naar het volgende screenshot:
Hier ziet u de namen van enkele mensen en hun leeftijden. In de tabel hiernaast zullen we de VLOOKUP om de naam en leeftijd van de persoon te vinden.
Typ de volgende code om dit te doen:
Sub VLOOKUP_Function() Dim i als Long voor i = 5 tot 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub
Voer nu de macro uit. U ziet de volgende foutmelding:
Dit is een run-time fout. Waarom gebeurt dit? Kijk nog eens naar de dataset:
Zoals u kunt zien, zijn er geen gegevens voor "Aaron" en "Emma". Daarom voert het alleen de VLOOKUP voor de eerste vermelding. Daarna stopt het de uitvoering. Als je de fout wilt negeren en de rest van de leeftijden wilt vinden, gebruik dan de Bij fout Hervat Volgende verklaring.
Sub VLOOKUP_Function() Dim i As Long On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i End Sub
Na het uitvoeren van de VBA-code ziet u de volgende uitvoer:
Zoals u kunt zien, door de Bij fout Hervat Volgende commando, negeerden we de fout en vonden we de rest van de leeftijden van de personen. Onze VBA-code vond geen gegevens van Aaron en Emma. Daarom negeerde het die waarden en gaf het de rest van de waarden terug in het Excel-werkblad.
Lees meer: [Fixed] Excel heeft een probleem gevonden met één of meer formuleverwijzingen in dit werkblad
Schakel 'Bij fout hervatten volgende' uit met Excel VBA
Nu kunt u zich in een situatie bevinden waarin u fouten wilt negeren voor een bepaald segment van de VBA-code. Onthoud dat als u het statement On Error Resume Next in een VBA-code gebruikt, alle fouten daarna worden overgeslagen. Als u dat wilt uitschakelen en de foutafhandeling voor een ander segment wilt inschakelen, gebruikt u Bij fout Ga naar 0 Het zal de foutafhandeling weer inschakelen.
Algemeen gebruik:
Sub fout_afhandeling()
Fouten negeren
Bij fout Hervat Volgende
// regels code
Foutafhandeling inschakelen
Bij fout Ga naar 0
//lijnen van codes
Einde sub
Bekijk de volgende VBA-code:
Sub error_handling() Dim i As Long 'om fout te negeren On Error Resume Next For i = 5 To 9 Cells(i, 6).Value = WorksheetFunction.VLookup(Cells(i, 5), Range("B:C"), 2, 0) Next i 'om uit te schakelen bij fout resume next On Error GoTo 0 MsgBox i / 0 End Sub
We gebruikten de code eerder voor de VLOOKUP functie. Hier is een extra stuk code toegevoegd om het te demonstreren. Onze code zal de fouten negeren tijdens het uitvoeren van de VLOOKUP maar het zal de foutafhandeling activeren na de Bij fout Ga naar 0 verklaring.
Lees meer: Excel VBA: Schakel de "On Error Resume Next" uit.
VBA "Bij fout ga naar
Eerder besprak ik de afhandeling van de fouten met de methode On Error. Ons hele artikel ging over Bij fout hervat Volgende. Nu zijn er ook twee soorten foutafhandeling die ik in de volgende paragrafen zal bespreken.
1. VBA Bij fout ga naar 0
De Op fout Goto 0 statement is Excel's ingebouwde instelling indien uw codes geen foutafhandeling hebben. Het houdt in feite in dat wanneer VBA een fout vindt met Bij fout Ga naar 0 stopt het uitvoeren van de code en toont de traditionele foutmelding.
Bij fout Ga naar 0 Het definieert regel 0 niet als het begin van de code voor foutafhandeling, zelfs als de methode een regel met nummer 0 bevat.
Kijk eens naar de volgende code:
Sub on_error_goto_0() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo 0 ActiveSheet.Name = "Copy-4" End Sub
We hebben je deze code al laten zien. Deze code verbergt in principe alle werkbladen in je huidige werkmap. Nu heb ik inderdaad een extra stukje code met Bij fout Ga naar 0 Als u de code uitvoert, ziet u het volgende:
Het toont deze fout omdat we geen bladen met dezelfde naam in de actieve werkmap kunnen hebben.
2. VBA Bij fout ga naar regel
Nu kunt u Excel ook opdracht geven om een ander segment van de code uit te voeren als het een fout vindt door gebruik te maken van de optie Bij fout Ga naar regel Het vertelt Excel om iets uit te voeren na het vinden van een fout.
Het line argument is een willekeurige line tag of regelnummer. Als onze code een run-time fout veroorzaakt, zal deze naar de regel gaan, waardoor de error handler actief wordt in de uitvoering. Denk eraan dat uw gedefinieerde regel in de exacte procedure moet staan als het On Error statement; anders zal het een compileerfout veroorzaken.
Kijk eens naar de volgende code:
Sub on_error_goto_line() Dim copies As Worksheet On Error Resume Next For Each copies In ActiveWorkbook.Sheets copies.Visible = False Next copies On Error GoTo error_handler ActiveSheet.Name = "Copy-4" Exit Sub error_handler: MsgBox "Er is ook een blad met dezelfde naam. Probeer een andere." End Sub
Je zag de code in het vorige voorbeeld. Toen we gebruik maakten van Bij fout Ga naar 0 veroorzaakte een fout. Maar hier hebben we dat vervangen door de Bij fout Ga naar regel verklaring.
Voer nu de code uit en je ziet het volgende:
Zoals u kunt zien, toont het ons niet het standaard foutvenster, maar het aangepaste berichtvenster dat we maakten in de error_handler segment. Wanneer Excel een fout vindt, springt het naar het error_handler segment en toont ons de berichtenbox.
We gebruikten ook een Exit Sub in de procedure. Als er geen blad is met de naam " VLOOKUP ", zal onze VBA-code het actieve blad hernoemen. Daarna moeten we de uitvoering hier beëindigen, omdat we niet verder hoeven te gaan naar de fouthandler en het berichtvak moeten weergeven.
VBA 'Bij fout' werkt niet in Excel
Soms, hoe hard je ook probeert, werkt de On Error methode niet. Eerder implementeerden we de Op fout methode om de fouten af te handelen. Maar, soms zal het fouten tonen, zelfs als u gebruik maakt van Bij fout Hervat Volgende of Bij fout Ga naar 0 Er kunnen verschillende redenen zijn in je code die je moet repareren. Dat ga ik je niet laten zien.
De fundamentele reden voor VBA ' Op Fout'. Niet werken in Excel is het inschakelen van de optie "Breken op alle fouten" in Excel.
Volg deze stappen om dat op te lossen:
📌 Stappen
- Druk eerst op Alt+F11 op uw toetsenbord om de VBA-editor te openen.
- Klik nu op Gereedschap> Opties.
- Klik daarna op de Algemeen tabblad in de Opties dialoogvenster.
- Hier, zie je, " Pauze op alle fouten " is al gecontroleerd. Het voorkomt in feite dat u de fouten afhandelt.
- Om het te wijzigen, selecteert u de optie " Pauze bij onbehandelde fouten " en klik op OK .
Ik hoop dat het uw probleem van VBA "On Error" niet werkt in Excel oplost.
Lees meer: Redenen en correcties van NAAM-fouten in Excel (10 voorbeelden)
Dingen om te onthouden
✎ On Error Resume Next lost de fouten niet op. Het negeert de fout en gaat verder met de volgende verklaring.
✎ Excel vangt en slaat de run-time fouten op in Err object. Wanneer we de Bij fout Hervat Volgende statement, het wist Err object eigenschappen.
✎ U kunt de Bij fout Hervat Volgende statement in uw VBA-code in Excel door toevoeging van de Bij fout Ga naar 0 verklaring.
Conclusie
Tot slot hoop ik dat deze tutorial u een stukje nuttige kennis heeft opgeleverd om de Bij fout Hervat Volgende in Excel VBA. Ik raad u aan al deze instructies te leren en toe te passen op uw dataset. Download de oefenwerkmap en probeer deze zelf uit. Geef ook gerust feedback in de commentaarsectie. Uw waardevolle feedback houdt ons gemotiveerd om tutorials als deze te maken.
Vergeet niet onze website te bekijken Exceldemy.com voor verschillende Excel-gerelateerde problemen en oplossingen.
Blijf nieuwe methoden leren en blijf groeien!