VBA MsgBox en InputBox in Excel: dialoogvensters (2026)
Kort antwoord: MsgBox toont berichten aan gebruikers en vraagt om bevestiging, terwijl InputBox tekstinvoer van gebruikers ophaalt. Met deze twee VBA-functies maak je interactieve macro’s die communiceren met de gebruiker.
In het kort
- MsgBox toont een pop-up met tekst en optionele knoppen zoals OK, Ja/Nee of Annuleren
- InputBox vraagt de gebruiker om tekstinvoer via een dialoogvenster
- Application.InputBox is een uitgebreidere variant die specifieke datatypes accepteert (getallen, bereiken)
- Combineer beide functies voor interactieve macro’s met gebruikersinput en bevestigingen
- De retourwaarde van MsgBox vertelt welke knop is ingedrukt (vbYes, vbNo, vbCancel)
Wat zijn dialoogvensters in VBA?
Dialoogvensters zijn pop-upvensters waarmee je macro communiceert met de gebruiker. In plaats van een macro die stilletjes op de achtergrond draait, kun je:
- Informatie tonen: laat de gebruiker weten dat een taak is voltooid
- Waarschuwingen geven: meld fouten of vraag aandacht voor belangrijke zaken
- Bevestiging vragen: laat de gebruiker kiezen of een actie doorgaat
- Invoer verzamelen: vraag om een waarde, naam of celverwijzing
Dit maakt je macro’s veel gebruiksvriendelijker en flexibeler.
MsgBox: berichten tonen aan gebruikers
MsgBox (Message Box) is de eenvoudigste manier om informatie te tonen of een reactie te vragen.
Basis syntax
MsgBox prompt, [buttons], [title]
- prompt: de tekst die je wilt tonen (verplicht)
- buttons: welke knoppen en iconen worden getoond (optioneel)
- title: de titel van het dialoogvenster (optioneel)
Eenvoudig bericht tonen
De simpelste vorm toont alleen tekst met een OK-knop:
Sub EenvoudigBericht()
MsgBox "De macro is voltooid!"
End Sub
Dit opent een klein venster met je tekst en een OK-knop. De macro wacht tot de gebruiker klikt.
MsgBox met titel
Voeg een titel toe voor duidelijkheid:
Sub BerichtMetTitel()
MsgBox "Alle data is succesvol geimporteerd.", vbInformation, "Import voltooid"
End Sub
Nu toont het venster “Import voltooid” in de titelbalk.
MsgBox knoppen: vbOKOnly, vbYesNo en meer
Met de buttons-parameter bepaal je welke knoppen verschijnen.
Beschikbare knopopties
| Constante | Waarde | Knoppen |
|---|---|---|
| vbOKOnly | 0 | OK |
| vbOKCancel | 1 | OK, Annuleren |
| vbAbortRetryIgnore | 2 | Afbreken, Opnieuw, Negeren |
| vbYesNoCancel | 3 | Ja, Nee, Annuleren |
| vbYesNo | 4 | Ja, Nee |
| vbRetryCancel | 5 | Opnieuw, Annuleren |
Voorbeeld: Ja/Nee vraag
Sub BevestigVerwijderen()
Dim antwoord As VbMsgBoxResult
antwoord = MsgBox("Weet je zeker dat je deze rijen wilt verwijderen?", vbYesNo, "Bevestigen")
If antwoord = vbYes Then
' Voer de verwijdering uit
Selection.Delete
MsgBox "Rijen verwijderd.", vbInformation
Else
MsgBox "Actie geannuleerd.", vbInformation
End If
End Sub
Voorbeeld: Ja/Nee/Annuleren
Sub OpslaanVoorAfsluiten()
Dim antwoord As VbMsgBoxResult
antwoord = MsgBox("Wil je de wijzigingen opslaan?", vbYesNoCancel + vbQuestion, "Opslaan")
Select Case antwoord
Case vbYes
ActiveWorkbook.Save
MsgBox "Bestand opgeslagen."
Case vbNo
MsgBox "Wijzigingen niet opgeslagen."
Case vbCancel
MsgBox "Actie geannuleerd."
Exit Sub
End Select
End Sub
MsgBox iconen: visuele feedback
Voeg iconen toe om de aard van je bericht te verduidelijken.
Beschikbare iconen
| Constante | Waarde | Icoon | Gebruik voor |
|---|---|---|---|
| vbCritical | 16 | Rood kruis | Ernstige fouten |
| vbQuestion | 32 | Vraagteken | Vragen aan gebruiker |
| vbExclamation | 48 | Uitroepteken | Waarschuwingen |
| vbInformation | 64 | Blauwe i | Informatieve berichten |
Iconen combineren met knoppen
Je combineert knoppen en iconen met het plus-teken:
Sub WaarschuwingTonen()
MsgBox "Let op: dit bestand bevat macro's die mogelijk niet werken op andere computers.", _
vbOKOnly + vbExclamation, "Waarschuwing"
End Sub
Voorbeeld: kritieke fout
Sub FoutMelden()
MsgBox "Er is een fout opgetreden bij het lezen van het bestand." & vbNewLine & _
"Controleer of het bestand niet in gebruik is.", _
vbCritical + vbOKOnly, "Fout"
End Sub
Tip: Gebruik vbNewLine of vbCrLf om regeleinden toe te voegen aan je bericht.
Retourwaarde van MsgBox opvangen
Wanneer je meerdere knoppen toont, wil je weten welke is ingedrukt.
Retourwaarden
| Constante | Waarde | Betekenis |
|---|---|---|
| vbOK | 1 | OK ingedrukt |
| vbCancel | 2 | Annuleren ingedrukt |
| vbAbort | 3 | Afbreken ingedrukt |
| vbRetry | 4 | Opnieuw ingedrukt |
| vbIgnore | 5 | Negeren ingedrukt |
| vbYes | 6 | Ja ingedrukt |
| vbNo | 7 | Nee ingedrukt |
Praktisch voorbeeld
Sub DataVerwerken()
Dim doorgaan As VbMsgBoxResult
doorgaan = MsgBox("Er worden " & Selection.Rows.Count & " rijen verwerkt." & vbNewLine & _
"Dit kan enkele minuten duren." & vbNewLine & vbNewLine & _
"Wil je doorgaan?", _
vbYesNo + vbQuestion, "Data verwerken")
If doorgaan = vbNo Then
Exit Sub
End If
' Verwerk de data
Application.ScreenUpdating = False
' ... verwerkingscode hier ...
Application.ScreenUpdating = True
MsgBox "Verwerking voltooid!", vbInformation, "Klaar"
End Sub
InputBox: tekstinvoer van gebruikers
InputBox vraagt de gebruiker om tekst in te voeren.
Basis syntax
InputBox(prompt, [title], [default], [xpos], [ypos])
- prompt: de vraag of instructie (verplicht)
- title: titel van het venster
- default: vooringevulde waarde
- xpos, ypos: positie op het scherm (zelden gebruikt)
Eenvoudig voorbeeld
Sub VraagNaam()
Dim naam As String
naam = InputBox("Wat is je naam?", "Naam invoeren")
If naam <> "" Then
MsgBox "Hallo " & naam & "!", vbInformation
Else
MsgBox "Je hebt geen naam ingevoerd.", vbExclamation
End If
End Sub
InputBox met standaardwaarde
Sub VraagAantalKopieen()
Dim aantal As String
aantal = InputBox("Hoeveel kopien wil je maken?", "Aantal", "1")
If aantal = "" Then
Exit Sub ' Gebruiker klikte Annuleren
End If
' Gebruik de ingevoerde waarde
MsgBox "Je hebt gekozen voor " & aantal & " kopien."
End Sub
Annuleren detecteren
Wanneer de gebruiker op Annuleren klikt, retourneert InputBox een lege string:
Sub VraagWaarde()
Dim invoer As String
invoer = InputBox("Voer een waarde in:", "Invoer")
If StrPtr(invoer) = 0 Then
' Gebruiker klikte Annuleren
MsgBox "Geannuleerd.", vbInformation
Exit Sub
ElseIf invoer = "" Then
' Gebruiker klikte OK met leeg veld
MsgBox "Je hebt niets ingevoerd.", vbExclamation
Exit Sub
End If
' Verwerk de invoer
MsgBox "Je invoerde: " & invoer
End Sub
Let op: StrPtr(invoer) = 0 detecteert specifiek de Annuleren-knop, terwijl een lege string betekent dat OK is geklikt met een leeg veld.
Application.InputBox: geavanceerde invoer
Application.InputBox is krachtiger dan de standaard InputBox. Het belangrijkste voordeel: je kunt het datatype specificeren.
Syntax
Application.InputBox(Prompt, Title, Default, Left, Top, HelpFile, HelpContextId, Type)
De Type-parameter bepaalt welke invoer wordt geaccepteerd:
| Type | Accepteert |
|---|---|
| 0 | Formule |
| 1 | Getal |
| 2 | Tekst (standaard) |
| 4 | Boolean (Waar/Onwaar) |
| 8 | Celverwijzing (Range-object) |
| 16 | Foutwaarde |
| 64 | Array van waarden |
Je kunt types combineren door ze op te tellen (bijv. 1 + 2 = getal of tekst).
Voorbeeld: getal invoeren
Sub VraagGetal()
Dim percentage As Variant
percentage = Application.InputBox("Voer het kortingspercentage in:", _
"Korting", 10, Type:=1)
If percentage = False Then
Exit Sub ' Geannuleerd
End If
MsgBox "Korting van " & percentage & "% wordt toegepast."
End Sub
Voorbeeld: celbereik selecteren
Dit is een van de krachtigste toepassingen – laat de gebruiker een bereik selecteren:
Sub SelecteerBereik()
Dim rng As Range
On Error Resume Next
Set rng = Application.InputBox("Selecteer het bereik dat je wilt opmaken:", _
"Bereik selecteren", _
Selection.Address, _
Type:=8)
On Error GoTo 0
If rng Is Nothing Then
MsgBox "Geen bereik geselecteerd.", vbExclamation
Exit Sub
End If
' Pas opmaak toe op geselecteerde bereik
rng.Interior.Color = RGB(255, 255, 0)
rng.Font.Bold = True
MsgBox rng.Cells.Count & " cellen zijn opgemaakt.", vbInformation
End Sub
Waarom On Error Resume Next? Wanneer de gebruiker Annuleren klikt bij Type:=8, genereert VBA een fout. Met foutafhandeling vang je dit netjes op.
Combineren voor interactieve macro’s
De kracht zit in het combineren van MsgBox en InputBox.
Voorbeeld: rapport genereren met gebruikersinput
Sub GenereerRapport()
Dim rapportNaam As String
Dim startDatum As String
Dim eindDatum As String
Dim bevestig As VbMsgBoxResult
' Vraag rapportnaam
rapportNaam = InputBox("Geef het rapport een naam:", "Rapport naam", "Maandrapport")
If rapportNaam = "" Then Exit Sub
' Vraag periode
startDatum = InputBox("Voer de startdatum in (dd-mm-jjjj):", "Startdatum", Format(Date - 30, "dd-mm-yyyy"))
If startDatum = "" Then Exit Sub
eindDatum = InputBox("Voer de einddatum in (dd-mm-jjjj):", "Einddatum", Format(Date, "dd-mm-yyyy"))
If eindDatum = "" Then Exit Sub
' Bevestig
bevestig = MsgBox("Rapport: " & rapportNaam & vbNewLine & _
"Periode: " & startDatum & " t/m " & eindDatum & vbNewLine & vbNewLine & _
"Is dit correct?", _
vbYesNo + vbQuestion, "Bevestigen")
If bevestig = vbNo Then
MsgBox "Rapport geannuleerd.", vbInformation
Exit Sub
End If
' Genereer rapport
MsgBox "Rapport '" & rapportNaam & "' wordt gegenereerd...", vbInformation
' ... rapportcode hier ...
End Sub
Voorbeeld: data kopieren naar geselecteerd bereik
Sub KopieerNaarBereik()
Dim bronBereik As Range
Dim doelBereik As Range
Dim bevestig As VbMsgBoxResult
' Laat gebruiker bronbereik selecteren
On Error Resume Next
Set bronBereik = Application.InputBox("Selecteer de brondata:", _
"Bron selecteren", Type:=8)
On Error GoTo 0
If bronBereik Is Nothing Then Exit Sub
' Laat gebruiker doelbereik selecteren
On Error Resume Next
Set doelBereik = Application.InputBox("Selecteer waar de data naartoe moet:", _
"Doel selecteren", Type:=8)
On Error GoTo 0
If doelBereik Is Nothing Then Exit Sub
' Bevestig actie
bevestig = MsgBox("Kopieren van " & bronBereik.Address & " naar " & doelBereik.Address & "?", _
vbYesNo + vbQuestion, "Bevestigen")
If bevestig = vbYes Then
bronBereik.Copy doelBereik
MsgBox "Data gekopieerd!", vbInformation
End If
End Sub
Stappenplan: MsgBox en InputBox toevoegen aan macro
Windows
- Open de VBA-editor met Alt + F11
- Dubbelklik op een module in de Project Verkenner (of voeg een nieuwe toe via Invoegen > Module)
- Schrijf je Sub procedure
- Voeg MsgBox of InputBox toe op de gewenste plekken
- Test met F5 of door de macro uit te voeren vanuit Excel
Mac
- Open de VBA-editor met Fn + Option + F11
- Navigeer naar de juiste module
- Schrijf je code
- Test de macro
Tip: Gebruik F8 om stap voor stap door je code te gaan en te zien hoe dialoogvensters verschijnen.
Veelgemaakte fouten
1. Retourwaarde niet opvangen
Fout:
MsgBox "Doorgaan?", vbYesNo
' Code gaat altijd door, ongeacht de keuze
Oplossing:
Dim antwoord As VbMsgBoxResult
antwoord = MsgBox("Doorgaan?", vbYesNo)
If antwoord = vbNo Then Exit Sub
2. InputBox Annuleren niet afhandelen
Fout:
Dim waarde As Integer
waarde = InputBox("Voer getal in:")
' Crasht als gebruiker annuleert
Oplossing:
Dim invoer As String
invoer = InputBox("Voer getal in:")
If invoer = "" Then Exit Sub
Dim waarde As Integer
waarde = CInt(invoer)
3. Application.InputBox Type:=8 zonder foutafhandeling
Fout:
Dim rng As Range
Set rng = Application.InputBox("Selecteer bereik:", Type:=8)
' Crasht bij Annuleren
Oplossing:
On Error Resume Next
Set rng = Application.InputBox("Selecteer bereik:", Type:=8)
On Error GoTo 0
If rng Is Nothing Then Exit Sub
4. Verkeerde quotes in MsgBox tekst
Fout:
MsgBox "Hij zei "hallo""
' Syntaxfout
Oplossing:
MsgBox "Hij zei ""hallo"""
' Of gebruik enkele quotes
MsgBox "Hij zei 'hallo'"
5. Lange teksten zonder regeleinden
Fout:
MsgBox "Dit is een hele lange tekst die doorloopt en moeilijk leesbaar wordt voor de gebruiker"
Oplossing:
MsgBox "Dit is een tekst die netjes" & vbNewLine & _
"over meerdere regels is verdeeld" & vbNewLine & _
"voor betere leesbaarheid."
FAQ
Wat is het verschil tussen InputBox en Application.InputBox?
De standaard InputBox retourneert altijd tekst en biedt geen validatie. Application.InputBox kan specifieke datatypes afdwingen (getallen, bereiken, formules) en toont een foutmelding als de gebruiker het verkeerde type invoert. Voor het selecteren van celbereiken moet je Application.InputBox met Type:=8 gebruiken.
Kan ik de positie van een MsgBox bepalen?
Nee, de standaard MsgBox verschijnt altijd gecentreerd op het scherm. Voor aangepaste positionering moet je een UserForm maken, wat meer controle biedt over uiterlijk en plaatsing.
Hoe maak ik een MsgBox met meer dan drie knoppen?
Dat kan niet met de standaard MsgBox. Voor meer knoppen of complexere keuzes maak je een UserForm met knoppen naar wens. UserForms bieden volledige controle over de interface.
Werken MsgBox en InputBox in Excel Online?
Nee, VBA werkt niet in Excel Online. Dialoogvensters zijn alleen beschikbaar in de desktop-versie van Excel. Voor webgebaseerde oplossingen bekijk je Office Scripts of Power Automate.
Hoe toon ik een bericht zonder dat de macro stopt?
De standaard MsgBox pauzeert de macro totdat de gebruiker klikt. Voor een bericht dat vanzelf verdwijnt, gebruik je de Windows API of de Application.StatusBar om tekst in de statusbalk te tonen zonder de macro te onderbreken.
Kan ik een wachtwoord vragen met InputBox?
Ja, maar de tekst is zichtbaar tijdens het typen. Voor echte wachtwoordinvoer (met sterretjes) moet je een UserForm maken met een TextBox waarvan de PasswordChar-eigenschap is ingesteld.
Hoe combineer ik meerdere iconen of knoppen?
Tel de constantes bij elkaar op: vbYesNo + vbQuestion geeft Ja/Nee knoppen met een vraagteken-icoon. Je kunt niet meerdere iconen combineren – kies er een die past bij je bericht.
Waarom werkt mijn InputBox niet met getallen?
De standaard InputBox retourneert tekst. Converteer met CInt(), CDbl() of CLng() naar een getal. Of gebruik Application.InputBox met Type:=1 voor automatische getalvalidatie.
Gerelateerde onderwerpen
- Macro opnemen in Excel: automatiseren zonder code schrijven
- VBA in Excel: de programmeertaal achter macro’s
- Excel formules: alle functies op een rij
- ALS functie in Excel: voorwaardelijke logica in formules
Wil je dit uitbesteden? Macro laten maken of repareren?. Neem vrijblijvend contact op.
Hulp nodig?
Loop je vast met MsgBox, InputBox of andere VBA-code? Of wil je een interactieve macro laten bouwen voor je specifieke situatie?
- WhatsApp: Stuur een bericht
- E-mail: w.bouwmeester@bouwmeesterconsultancy.nl
- Telefoon: +31 6 28963636
Stuur gerust je Excel-bestand mee met een beschrijving van wat je wilt bereiken. We reageren meestal binnen 24 uur.





