Berichtvensters en Invoervelden
Veeg om het menu te tonen
Voordat je een volledig formulier bouwt, is het de moeite waard om de twee eenvoudigste manieren waarop VBA met een gebruiker kan communiceren onder de knie te krijgen: MsgBox, die informatie toont en eventueel een vraag stelt, en InputBox, die om een kort stukje tekst vraagt.
MsgBox
In zijn eenvoudigste vorm toont MsgBox gewoon een bericht en wacht tot de gebruiker op OK klikt:
MsgBox "Customer saved successfully."
Op deze manier gebruikt — als een statement, zonder haakjes en zonder dat het resultaat wordt opgeslagen — is MsgBox een doodlopende weg: het toont het bericht en de code gaat verder, ongeacht wat de gebruiker doet. Zodra je moet weten op welke knop is geklikt, wordt MsgBox een functie in plaats van een statement, wat betekent dat het haakjes nodig heeft en iets om het resultaat in op te slaan:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo en vbQuestion worden bij elkaar opgeteld met een gewone +, wat ongebruikelijk lijkt de eerste keer dat je het ziet, maar het is simpelweg hoe VBA je toestaat om twee onafhankelijke instellingen — welke knoppen verschijnen en welk pictogram wordt getoond — te combineren tot het enkele tweede argument dat MsgBox verwacht. result komt terug als een van VBA's ingebouwde constanten, vbYes of vbNo, die eigenlijk gewoon vermomde getallen zijn (6 en 7, hoewel je nooit het letterlijke getal zou schrijven). Een actie laten afhangen van het antwoord doe je met een gewone If:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Waar MsgBox altijd een vaste set knopconstanten retourneert, vraagt InputBox de gebruiker om iets in te typen en geeft het terug wat er is ingevoerd:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
Het derde argument, hier "Chicago", vult het tekstvak vooraf in — handig om een waarschijnlijk antwoord te suggereren dat de gebruiker kan accepteren of overschrijven. Twee details gaan gemakkelijk de eerste keer mis: wat de gebruiker ook typt, het wordt altijd als een String teruggegeven, ongeacht hoe het eruitziet. Dus als je 25 typt, krijg je de tekst "25" en niet het getal 25. Je hebt CInt of CDbl nodig voordat je er rekenkundige bewerkingen mee uitvoert. Daarnaast veroorzaakt het klikken op Annuleren geen foutmelding en stopt het je code niet — het retourneert simpelweg een lege string (""), waar je code expliciet op moet controleren als een leeg antwoord niet geldig is.
Gebruikersprompts en bevestigingen
Het combineren van beide is het standaardpatroon voor elke actie die gebruikersinvoer leest en vervolgens bevestiging nodig heeft voordat er iets risicovols gebeurt:
Dim searchCity As String
Dim confirmMsg As VbMsgBoxResult
searchCity = InputBox("Enter a City to search for:", "Search Customers")
If searchCity = "" Then
MsgBox "Search cancelled — no city entered."
Exit Sub
End If
confirmMsg = MsgBox("Search for customers in " & searchCity & "?", vbYesNo)
If confirmMsg = vbNo Then Exit Sub
' ... proceed with the search
Let op: confirmMsg wordt gedeclareerd als As VbMsgBoxResult in plaats van een generiek type — dit is het daadwerkelijke benoemde type dat VBA gebruikt voor de returnwaarde van MsgBox. Door het expliciet te declareren (in plaats van als Variant), biedt de VBE automatisch aanvullen voor vbYes, vbNo en de rest tijdens het typen. De controle op een lege string na InputBox en de controle op vbNo na MsgBox gebruiken hetzelfde ontsnappingspatroon, Exit Sub, waarmee de procedure direct wordt gestopt in plaats van door te gaan naar code die ervan uitgaat dat er geldige invoer is.
Taak
- Schrijf een
Subdie metInputBoxom een Customer ID vraagt en vervolgens met MsgBox bevestigt: "Delete customer [ID]?" met Ja/Nee-knoppen en een vraagtekenpictogram. - Behandel zowel het lege-string geval (gebruiker klikt op Annuleren in de InputBox) als het
vbNogeval (gebruiker weigert de bevestiging) door de Sub vroegtijdig te verlaten met een bericht dat uitlegt dat er niets is gebeurd. - Alleen als beide controles slagen, toon dan een laatste MsgBox met de tekst "Customer would be deleted here."
1. Het verkrijgen van de Customer ID en het opbouwen van de bevestiging
InputBoxheeft een prompt nodig en kan een titel als tweede argument krijgen — sla de invoer op in eenString-variabele.- Het bevestigingsbericht moet de daadwerkelijke ID bevatten door deze te koppelen met
&, niet als vaste tekst — anders zou er letterlijk altijd "[ID]" staan. MsgBoxals functie (om het resultaat op te vangen) vereist haakjes; combineervbYesNoenvbQuestionmet+.
2. Afhandelen van Annuleren en Nee
- Controleer direct na de
InputBox-regel op het lege-string geval, voordat je een bevestigingsbericht probeert te maken — het heeft geen zin om te vragen "Delete customer?" als er geen ID is om te verwijderen. Exit Substopt de procedure onmiddellijk waar deze wordt geplaatst — gebruik dit direct in elkeIf-blok, met eenMsgBoxvlak ervoor die uitlegt dat er niets is gebeurd.- De
vbNo-controle komt na de bevestigings-MsgBox, waarbij het resultaat wordt vergeleken met de constantevbNo.
3. De laatste bevestiging
- Deze regel wordt alleen uitgevoerd als de uitvoering hier komt — omdat beide eerdere controles bij mislukking
Exit Subuitvoeren, is het voldoende om dezeMsgBoxna beide controles te plaatsen om te garanderen dat deze alleen wordt getoond als beide zijn geslaagd.
Option Explicit
Sub DeleteCustomerPrompt()
Dim customerID As String
Dim confirmResult As VbMsgBoxResult
' Step 1 — ask for the Customer ID
customerID = InputBox("Enter the Customer ID to delete:", "Delete Customer")
' Step 2a — handle Cancel / empty input
If customerID = "" Then
MsgBox "Cancelled — no Customer ID was entered. Nothing happened."
Exit Sub
End If
' Step 1 (continued) — confirm with Yes/No
confirmResult = MsgBox("Delete customer " & customerID & "?", _
vbYesNo + vbQuestion, "Confirm Delete")
' Step 2b — handle No
If confirmResult = vbNo Then
MsgBox "Cancelled — deletion was not confirmed. Nothing happened."
Exit Sub
End If
' Step 3 — both checks passed
MsgBox "Customer would be deleted here."
End Sub
Voer het uit (F5) en probeer alle drie de paden: klik op Annuleren in de InputBox, klik op Nee bij de bevestiging en voer tenslotte een ID in en klik op Ja — elk zou een ander van de drie berichten moeten tonen.
Bedankt voor je feedback!
Vraag AI
Vraag AI
Vraag wat u wilt of probeer een van de voorgestelde vragen om onze chat te starten.
Berichtvensters en Invoervelden
Voordat je een volledig formulier bouwt, is het de moeite waard om de twee eenvoudigste manieren waarop VBA met een gebruiker kan communiceren onder de knie te krijgen: MsgBox, die informatie toont en eventueel een vraag stelt, en InputBox, die om een kort stukje tekst vraagt.
MsgBox
In zijn eenvoudigste vorm toont MsgBox gewoon een bericht en wacht tot de gebruiker op OK klikt:
MsgBox "Customer saved successfully."
Op deze manier gebruikt — als een statement, zonder haakjes en zonder dat het resultaat wordt opgeslagen — is MsgBox een doodlopende weg: het toont het bericht en de code gaat verder, ongeacht wat de gebruiker doet. Zodra je moet weten op welke knop is geklikt, wordt MsgBox een functie in plaats van een statement, wat betekent dat het haakjes nodig heeft en iets om het resultaat in op te slaan:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo en vbQuestion worden bij elkaar opgeteld met een gewone +, wat ongebruikelijk lijkt de eerste keer dat je het ziet, maar het is simpelweg hoe VBA je toestaat om twee onafhankelijke instellingen — welke knoppen verschijnen en welk pictogram wordt getoond — te combineren tot het enkele tweede argument dat MsgBox verwacht. result komt terug als een van VBA's ingebouwde constanten, vbYes of vbNo, die eigenlijk gewoon vermomde getallen zijn (6 en 7, hoewel je nooit het letterlijke getal zou schrijven). Een actie laten afhangen van het antwoord doe je met een gewone If:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Waar MsgBox altijd een vaste set knopconstanten retourneert, vraagt InputBox de gebruiker om iets in te typen en geeft het terug wat er is ingevoerd:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
Het derde argument, hier "Chicago", vult het tekstvak vooraf in — handig om een waarschijnlijk antwoord te suggereren dat de gebruiker kan accepteren of overschrijven. Twee details gaan gemakkelijk de eerste keer mis: wat de gebruiker ook typt, het wordt altijd als een String teruggegeven, ongeacht hoe het eruitziet. Dus als je 25 typt, krijg je de tekst "25" en niet het getal 25. Je hebt CInt of CDbl nodig voordat je er rekenkundige bewerkingen mee uitvoert. Daarnaast veroorzaakt het klikken op Annuleren geen foutmelding en stopt het je code niet — het retourneert simpelweg een lege string (""), waar je code expliciet op moet controleren als een leeg antwoord niet geldig is.
Gebruikersprompts en bevestigingen
Het combineren van beide is het standaardpatroon voor elke actie die gebruikersinvoer leest en vervolgens bevestiging nodig heeft voordat er iets risicovols gebeurt:
Dim searchCity As String
Dim confirmMsg As VbMsgBoxResult
searchCity = InputBox("Enter a City to search for:", "Search Customers")
If searchCity = "" Then
MsgBox "Search cancelled — no city entered."
Exit Sub
End If
confirmMsg = MsgBox("Search for customers in " & searchCity & "?", vbYesNo)
If confirmMsg = vbNo Then Exit Sub
' ... proceed with the search
Let op: confirmMsg wordt gedeclareerd als As VbMsgBoxResult in plaats van een generiek type — dit is het daadwerkelijke benoemde type dat VBA gebruikt voor de returnwaarde van MsgBox. Door het expliciet te declareren (in plaats van als Variant), biedt de VBE automatisch aanvullen voor vbYes, vbNo en de rest tijdens het typen. De controle op een lege string na InputBox en de controle op vbNo na MsgBox gebruiken hetzelfde ontsnappingspatroon, Exit Sub, waarmee de procedure direct wordt gestopt in plaats van door te gaan naar code die ervan uitgaat dat er geldige invoer is.
Taak
- Schrijf een
Subdie metInputBoxom een Customer ID vraagt en vervolgens met MsgBox bevestigt: "Delete customer [ID]?" met Ja/Nee-knoppen en een vraagtekenpictogram. - Behandel zowel het lege-string geval (gebruiker klikt op Annuleren in de InputBox) als het
vbNogeval (gebruiker weigert de bevestiging) door de Sub vroegtijdig te verlaten met een bericht dat uitlegt dat er niets is gebeurd. - Alleen als beide controles slagen, toon dan een laatste MsgBox met de tekst "Customer would be deleted here."
1. Het verkrijgen van de Customer ID en het opbouwen van de bevestiging
InputBoxheeft een prompt nodig en kan een titel als tweede argument krijgen — sla de invoer op in eenString-variabele.- Het bevestigingsbericht moet de daadwerkelijke ID bevatten door deze te koppelen met
&, niet als vaste tekst — anders zou er letterlijk altijd "[ID]" staan. MsgBoxals functie (om het resultaat op te vangen) vereist haakjes; combineervbYesNoenvbQuestionmet+.
2. Afhandelen van Annuleren en Nee
- Controleer direct na de
InputBox-regel op het lege-string geval, voordat je een bevestigingsbericht probeert te maken — het heeft geen zin om te vragen "Delete customer?" als er geen ID is om te verwijderen. Exit Substopt de procedure onmiddellijk waar deze wordt geplaatst — gebruik dit direct in elkeIf-blok, met eenMsgBoxvlak ervoor die uitlegt dat er niets is gebeurd.- De
vbNo-controle komt na de bevestigings-MsgBox, waarbij het resultaat wordt vergeleken met de constantevbNo.
3. De laatste bevestiging
- Deze regel wordt alleen uitgevoerd als de uitvoering hier komt — omdat beide eerdere controles bij mislukking
Exit Subuitvoeren, is het voldoende om dezeMsgBoxna beide controles te plaatsen om te garanderen dat deze alleen wordt getoond als beide zijn geslaagd.
Option Explicit
Sub DeleteCustomerPrompt()
Dim customerID As String
Dim confirmResult As VbMsgBoxResult
' Step 1 — ask for the Customer ID
customerID = InputBox("Enter the Customer ID to delete:", "Delete Customer")
' Step 2a — handle Cancel / empty input
If customerID = "" Then
MsgBox "Cancelled — no Customer ID was entered. Nothing happened."
Exit Sub
End If
' Step 1 (continued) — confirm with Yes/No
confirmResult = MsgBox("Delete customer " & customerID & "?", _
vbYesNo + vbQuestion, "Confirm Delete")
' Step 2b — handle No
If confirmResult = vbNo Then
MsgBox "Cancelled — deletion was not confirmed. Nothing happened."
Exit Sub
End If
' Step 3 — both checks passed
MsgBox "Customer would be deleted here."
End Sub
Voer het uit (F5) en probeer alle drie de paden: klik op Annuleren in de InputBox, klik op Nee bij de bevestiging en voer tenslotte een ID in en klik op Ja — elk zou een ander van de drie berichten moeten tonen.
Bedankt voor je feedback!