VBA foutafhandeling: On Error uitgelegd (2026)
VBA foutafhandeling voorkomt dat je macro crasht wanneer er iets misgaat. Met On Error statements bepaal je zelf wat er gebeurt bij een fout: de macro stoppen, doorgaan, of naar een specifieke foutafhandeling springen. Dit is essentieel voor robuuste Excel-automatisering.
Laatst bijgewerkt: januari 2026
Wat is foutafhandeling in VBA?
Foutafhandeling (Engels: error handling) is een techniek waarmee je controleert wat er gebeurt wanneer VBA een fout tegenkomt tijdens het uitvoeren van code. Zonder foutafhandeling stopt je macro abrupt met een foutmelding, wat frustrerend is voor gebruikers.
De drie belangrijkste On Error statements:
| Statement | Werking |
|---|---|
On Error GoTo label |
Spring naar een specifieke regel bij een fout |
On Error Resume Next |
Negeer de fout en ga door met de volgende regel |
On Error GoTo 0 |
Schakel foutafhandeling uit (standaard gedrag) |
Met goede foutafhandeling maak je professionele macro’s die niet crashen, zelfs als er onverwachte situaties optreden.
On Error GoTo: fouten opvangen
De meest gebruikte methode is On Error GoTo, waarmee je fouten opvangt en afhandelt in een apart codeblok.
Stap 1: Open de VBA-editor
- Windows: Druk op
Alt + F11 - Mac: Druk op
Fn + Option + F11
Stap 2: Voeg een nieuwe module toe
- Klik rechts op je project in de Project Explorer
- Kies Invoegen > Module
Stap 3: Schrijf code met foutafhandeling
Sub DelenMetFoutafhandeling()
On Error GoTo FoutHandler
Dim getal As Double
Dim deler As Double
Dim resultaat As Double
getal = 100
deler = 0 ' Dit veroorzaakt een fout!
resultaat = getal / deler
MsgBox "Resultaat: " & resultaat
Exit Sub
FoutHandler:
MsgBox "Er is een fout opgetreden: " & Err.Description, vbExclamation
End Sub
Stap 4: Begrijp de structuur
De code werkt als volgt:
1. On Error GoTo FoutHandler activeert foutafhandeling
2. Bij een fout springt VBA naar het label FoutHandler:
3. Exit Sub voorkomt dat de fouthandler altijd wordt uitgevoerd
4. In de handler toon je een gebruiksvriendelijke melding
On Error Resume Next: fouten negeren
Soms wil je dat de code gewoon doorgaat bij een fout. Dit is handig voor situaties waar een fout acceptabel is.
Wanneer gebruiken?
- Controleren of een bestand bestaat
- Controleren of een werkblad aanwezig is
- Optionele bewerkingen die mogen falen
Voorbeeld: werkblad controleren
Sub ControleerWerkblad()
Dim ws As Worksheet
On Error Resume Next
Set ws = ThisWorkbook.Worksheets("Rapport")
On Error GoTo 0 ' Zet normale foutafhandeling terug
If ws Is Nothing Then
MsgBox "Werkblad 'Rapport' bestaat niet!", vbExclamation
Else
MsgBox "Werkblad gevonden!", vbInformation
End If
End Sub
Let op: Gebruik On Error Resume Next spaarzaam! Als je het vergeet uit te schakelen met On Error GoTo 0, worden alle fouten genegeerd en mis je mogelijk belangrijke problemen.
On Error GoTo 0: foutafhandeling uitschakelen
Met On Error GoTo 0 schakel je foutafhandeling uit en keer je terug naar het standaardgedrag van VBA.
Waarom belangrijk?
Na On Error Resume Next wil je vaak weer normale foutafhandeling. Anders worden alle volgende fouten ook genegeerd.
Sub VeiligeCode()
' Tijdelijk fouten negeren
On Error Resume Next
' Riskante operatie
Kill "C:\TijdelijkBestand.txt"
On Error GoTo 0 ' Terug naar normaal
' Hier gelden weer normale regels
' Een fout hier stopt de macro
End Sub
Het Err-object: foutinformatie ophalen
VBA biedt het Err-object met details over de laatst opgetreden fout.
Belangrijke eigenschappen
| Eigenschap | Beschrijving |
|---|---|
Err.Number |
Unieke foutcode (0 = geen fout) |
Err.Description |
Tekstuele beschrijving van de fout |
Err.Source |
Naam van het object dat de fout veroorzaakte |
Voorbeeld: uitgebreide foutafhandeling
Sub UitgebreideFoutafhandeling()
On Error GoTo FoutHandler
Dim wb As Workbook
Set wb = Workbooks.Open("C:\NietBestaandBestand.xlsx")
Exit Sub
FoutHandler:
MsgBox "Fout " & Err.Number & " in " & Err.Source & vbCrLf & _
Err.Description, vbCritical, "Fout opgetreden"
Err.Clear ' Wis de fout
End Sub
De Err.Clear methode wist de foutinformatie, wat handig is als je meerdere fouten wilt afhandelen.
Geavanceerde foutafhandeling met Resume
Na het afhandelen van een fout kun je met Resume bepalen waar de code verder gaat.
Resume-opties
| Statement | Werking |
|---|---|
Resume |
Probeer dezelfde regel opnieuw |
Resume Next |
Ga naar de volgende regel |
Resume label |
Spring naar een specifiek label |
Voorbeeld: gebruiker laten corrigeren
Sub BestandOpenenMetRetry()
Dim bestandspad As String
Dim wb As Workbook
bestandspad = "C:\MijnData.xlsx"
On Error GoTo FoutHandler
ProberenOpenen:
Set wb = Workbooks.Open(bestandspad)
MsgBox "Bestand succesvol geopend!", vbInformation
Exit Sub
FoutHandler:
Dim antwoord As VbMsgBoxResult
antwoord = MsgBox("Kan bestand niet openen: " & bestandspad & vbCrLf & _
"Wil je een ander pad opgeven?", vbYesNo + vbQuestion)
If antwoord = vbYes Then
bestandspad = InputBox("Voer het juiste pad in:")
If bestandspad <> "" Then
Resume ProberenOpenen
End If
End If
End Sub
Best practices voor VBA foutafhandeling
Voor betrouwbare VBA-code volg je deze richtlijnen:
1. Gebruik altijd foutafhandeling in productie-code
Sub ProfessioneleMacro()
On Error GoTo FoutHandler
' Je code hier
Exit Sub
FoutHandler:
' Log de fout of toon melding
Debug.Print "Fout: " & Err.Description
Resume Next ' Of andere actie
End Sub
2. Maak een centrale foutafhandelingsprocedure
Sub LogFout(procedureNaam As String)
Dim foutmelding As String
foutmelding = "Fout in " & procedureNaam & vbCrLf & _
"Nummer: " & Err.Number & vbCrLf & _
"Beschrijving: " & Err.Description
' Log naar werkblad of bestand
Debug.Print foutmelding
MsgBox foutmelding, vbCritical
End Sub
3. Combineer met VBA variabelen voor flexibiliteit
Sla foutinformatie op in variabelen voor latere verwerking of logging.
Veelgemaakte fouten
Fout 1: Exit Sub vergeten voor de fouthandler
Probleem: De fouthandler wordt altijd uitgevoerd, ook als er geen fout optreedt.
' FOUT - Exit Sub ontbreekt
Sub FouteCode()
On Error GoTo FoutHandler
MsgBox "Alles goed"
FoutHandler:
MsgBox "Er was een fout" ' Wordt altijd getoond!
End Sub
Oplossing: Voeg altijd Exit Sub toe voor het fouthandler-label.
' CORRECT
Sub GoedCode()
On Error GoTo FoutHandler
MsgBox "Alles goed"
Exit Sub
FoutHandler:
MsgBox "Er was een fout" ' Alleen bij echte fout
End Sub
Fout 2: On Error Resume Next niet uitzetten
Probleem: Alle fouten worden genegeerd, ook onverwachte.
Oplossing: Zet direct na de riskante code On Error GoTo 0 om terug te keren naar normale foutafhandeling.
Fout 3: Err.Clear vergeten na foutafhandeling
Probleem: Bij meerdere fouten bevat Err nog steeds de oude foutinformatie.
Oplossing: Gebruik Err.Clear om het Err-object te resetten na afhandeling.
Fout 4: Oneindige lus met Resume
Probleem: Als je Resume gebruikt zonder de oorzaak op te lossen, blijft de code dezelfde fout herhalen.
' FOUT - Oneindige lus
FoutHandler:
MsgBox "Fout!"
Resume ' Probeert dezelfde regel steeds opnieuw
Oplossing: Gebruik Resume Next of los het probleem op voor je Resume aanroept.
Fout 5: Geen gebruiksvriendelijke foutmeldingen
Probleem: Technische foutmeldingen verwarren eindgebruikers.
Oplossing: Schrijf duidelijke, actiegerichte meldingen in het Nederlands.
' In plaats van: Err.Description tonen
MsgBox "Het bestand kon niet worden geopend. Controleer of het pad correct is.", vbExclamation
FAQ
Wat doet On Error GoTo in VBA?
On Error GoTo vertelt VBA om naar een specifiek label te springen wanneer er een fout optreedt. Dit label bevat code die de fout afhandelt, zodat je macro niet crasht.
Wanneer gebruik ik On Error Resume Next?
Gebruik On Error Resume Next wanneer een fout acceptabel is en je wilt dat de code gewoon doorgaat. Bijvoorbeeld bij het controleren of een bestand of werkblad bestaat.
Hoe reset ik foutafhandeling naar normaal?
Gebruik On Error GoTo 0 om terug te keren naar het standaardgedrag waarbij fouten de macro stoppen met een foutmelding.
Wat is het verschil tussen Resume en Resume Next?
Resume probeert de regel die de fout veroorzaakte opnieuw uit te voeren. Resume Next slaat die regel over en gaat verder met de volgende regel code.
Hoe krijg ik de foutcode te zien?
Het Err-object bevat alle foutinformatie. Gebruik Err.Number voor de foutcode en Err.Description voor een beschrijving.
Kan ik meerdere fouthandlers in een procedure hebben?
Technisch gezien kun je maar een actieve fouthandler hebben per procedure. Je kunt wel meerdere labels maken en met On Error GoTo wisselen tussen handlers.
Wat is het verschil tussen Err.Clear en On Error GoTo 0?
Err.Clear wist alleen de foutinformatie uit het Err-object. On Error GoTo 0 schakelt de gehele foutafhandeling uit, maar wist niet automatisch Err.
Hoe log ik fouten naar een bestand?
Gebruik de Open, Print en Close statements om foutmeldingen naar een tekstbestand te schrijven. Dit is handig voor het debuggen van complexe macro’s.
Gerelateerde artikelen
- VBA voor beginners in Excel – Leer de basis van VBA
- Macro opnemen in Excel – Automatiseren zonder code te schrijven
- VBA If Then Else – Voorwaardelijke code schrijven
- VBA lussen – For en Do While loops
- Excel foutmeldingen oplossen – Standaard Excel fouten
Hulp nodig bij Excel?
Kom je er niet uit met VBA foutafhandeling of andere Excel-automatisering? Ik help je graag verder.
Neem contact op:
– WhatsApp: Stuur een bericht
– E-mail: w.bouwmeester@bouwmeesterconsultancy.nl
– Telefoon: +31 6 28963636
Of bekijk mijn Excel hulp diensten voor professionele ondersteuning.





