Meldingsbokser og inndatabokser
Sveip for å vise menyen
Før du bygger et komplett skjema, er det verdt å mestre de to enkleste måtene VBA kan kommunisere med en bruker på: MsgBox, som viser informasjon og eventuelt stiller et spørsmål, og InputBox, som ber om en kort tekst tilbake.
MsgBox
I sin enkleste form viser MsgBox bare en melding og venter på at brukeren klikker OK:
MsgBox "Customer saved successfully."
Brukt på denne måten — som en setning, uten parenteser og uten å fange opp et resultat — er MsgBox en blindvei: den viser meldingen, og koden fortsetter uansett hva brukeren gjør. I det øyeblikket du trenger å vite hvilken knapp som ble klikket, blir MsgBox en funksjon i stedet for en setning, noe som betyr at den trenger parenteser og noe å lagre resultatet i:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo og vbQuestion legges sammen med et vanlig +, noe som kan virke uvant første gang du ser det, men det er rett og slett slik VBA lar deg kombinere to uavhengige innstillinger — hvilke knapper som vises, og hvilket ikon som vises — til det ene andre argumentet MsgBox forventer. result kommer tilbake som en av VBAs innebygde konstanter, vbYes eller vbNo, som egentlig bare er tall i forkledning (6 og 7, selv om du aldri ville skrevet det bokstavelige tallet). Styr en handling basert på svaret med en enkel If:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Der MsgBox returnerer kun et fast sett med knappkonstanter, ber InputBox brukeren om å skrive inn noe og returnerer det brukeren har skrevet inn:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
Det tredje argumentet, "Chicago" her, forhåndsutfyller tekstboksen — nyttig for å foreslå et sannsynlig svar brukeren enten kan godta eller overskrive. To detaljer er lette å gjøre feil første gang: uansett hva brukeren skriver inn, returneres det alltid som en streng, så hvis man skriver inn 25 får man teksten "25", ikke tallet 25, og du må bruke CInt eller CDbl før du gjør aritmetikk med det; og hvis man klikker Cancel oppstår det ingen feil og koden stopper ikke — det returneres bare en tom streng (""), som koden din må sjekke eksplisitt hvis et tomt svar ikke er gyldig.
Brukerforespørsler og bekreftelser
Å kombinere de to er standardmønsteret for enhver handling som leser brukerinput og deretter må bekrefte før noe risikabelt utføres:
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
Merk at confirmMsg er deklarert As VbMsgBoxResult i stedet for en generell type — dette er den faktiske navngitte typen VBA bruker for returverdien fra MsgBox, og ved å deklarere den eksplisitt (i stedet for å la den være en Variant) får du autoutfylling for vbYes, vbNo og de andre mens du skriver. Sjekken for tom streng etter InputBox og sjekken for vbNo etter MsgBox bruker begge samme avbrytelsesmønster, Exit Sub, som stopper prosedyren umiddelbart i stedet for å la den fortsette inn i kode som forutsetter at gyldig input finnes.
Oppgave
- Skriv en
Subsom brukerInputBoxfor å be om et Customer ID, deretter MsgBox for å bekrefte "Delete customer [ID]?" med Ja/Nei-knapper og et spørsmålstegn-ikon. - Håndter både tom streng (brukeren trykket Avbryt i InputBox) og
vbNo-tilfellet (brukeren avslo bekreftelsen) ved å avslutte Sub tidlig med en melding som forklarer at ingenting skjedde. - Kun når begge sjekker er bestått, vis en siste MsgBox med teksten "Customer would be deleted here."
1. Hente Customer ID og bygge bekreftelsen
InputBoxtrenger en melding og kan ta en tittel som andre argument — lagre det som returneres i enString-variabel.- Bekreftelsesmeldingen må ha den faktiske ID-en satt inn med
&, ikke skrevet som en fast streng — ellers vil det alltid stå "[ID]" bokstavelig. MsgBoxbrukt som funksjon (for å fange resultatet) trenger parenteser; kombinervbYesNoogvbQuestionmed+.
2. Håndtering av Avbryt og Nei
- Sjekk for tom streng rett etter
InputBox-linjen, før du prøver å bygge en bekreftelsesmelding — det er ingen vits i å spørre "Delete customer?" hvis det ikke finnes en ID å slette. Exit Substopper prosedyren umiddelbart der den står — bruk den rett inne i hverIf-blokk, med enMsgBoxrett før som forklarer at ingenting skjedde.vbNo-sjekken kommer etter bekreftelses-MsgBox, og sammenligner resultatet du fanget mot konstantenvbNo.
3. Den siste bekreftelsen
- Denne linjen kjøres bare hvis utførelsen når den — siden begge de tidligere sjekkene bruker
Exit Subved feil, er det nok å plassere denneMsgBoxetter begge sjekkene for å garantere at den kun vises når begge er bestått.
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
Kjør den (F5) og prøv alle tre veier: klikk Avbryt i InputBox, klikk Nei i bekreftelsen, og til slutt skriv inn en ID og klikk Ja — hver skal gi en av de tre ulike meldingene.
Takk for tilbakemeldingene dine!
Spør AI
Spør AI
Spør om hva du vil, eller prøv ett av de foreslåtte spørsmålene for å starte chatten vår
Meldingsbokser og inndatabokser
Før du bygger et komplett skjema, er det verdt å mestre de to enkleste måtene VBA kan kommunisere med en bruker på: MsgBox, som viser informasjon og eventuelt stiller et spørsmål, og InputBox, som ber om en kort tekst tilbake.
MsgBox
I sin enkleste form viser MsgBox bare en melding og venter på at brukeren klikker OK:
MsgBox "Customer saved successfully."
Brukt på denne måten — som en setning, uten parenteser og uten å fange opp et resultat — er MsgBox en blindvei: den viser meldingen, og koden fortsetter uansett hva brukeren gjør. I det øyeblikket du trenger å vite hvilken knapp som ble klikket, blir MsgBox en funksjon i stedet for en setning, noe som betyr at den trenger parenteser og noe å lagre resultatet i:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo og vbQuestion legges sammen med et vanlig +, noe som kan virke uvant første gang du ser det, men det er rett og slett slik VBA lar deg kombinere to uavhengige innstillinger — hvilke knapper som vises, og hvilket ikon som vises — til det ene andre argumentet MsgBox forventer. result kommer tilbake som en av VBAs innebygde konstanter, vbYes eller vbNo, som egentlig bare er tall i forkledning (6 og 7, selv om du aldri ville skrevet det bokstavelige tallet). Styr en handling basert på svaret med en enkel If:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Der MsgBox returnerer kun et fast sett med knappkonstanter, ber InputBox brukeren om å skrive inn noe og returnerer det brukeren har skrevet inn:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
Det tredje argumentet, "Chicago" her, forhåndsutfyller tekstboksen — nyttig for å foreslå et sannsynlig svar brukeren enten kan godta eller overskrive. To detaljer er lette å gjøre feil første gang: uansett hva brukeren skriver inn, returneres det alltid som en streng, så hvis man skriver inn 25 får man teksten "25", ikke tallet 25, og du må bruke CInt eller CDbl før du gjør aritmetikk med det; og hvis man klikker Cancel oppstår det ingen feil og koden stopper ikke — det returneres bare en tom streng (""), som koden din må sjekke eksplisitt hvis et tomt svar ikke er gyldig.
Brukerforespørsler og bekreftelser
Å kombinere de to er standardmønsteret for enhver handling som leser brukerinput og deretter må bekrefte før noe risikabelt utføres:
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
Merk at confirmMsg er deklarert As VbMsgBoxResult i stedet for en generell type — dette er den faktiske navngitte typen VBA bruker for returverdien fra MsgBox, og ved å deklarere den eksplisitt (i stedet for å la den være en Variant) får du autoutfylling for vbYes, vbNo og de andre mens du skriver. Sjekken for tom streng etter InputBox og sjekken for vbNo etter MsgBox bruker begge samme avbrytelsesmønster, Exit Sub, som stopper prosedyren umiddelbart i stedet for å la den fortsette inn i kode som forutsetter at gyldig input finnes.
Oppgave
- Skriv en
Subsom brukerInputBoxfor å be om et Customer ID, deretter MsgBox for å bekrefte "Delete customer [ID]?" med Ja/Nei-knapper og et spørsmålstegn-ikon. - Håndter både tom streng (brukeren trykket Avbryt i InputBox) og
vbNo-tilfellet (brukeren avslo bekreftelsen) ved å avslutte Sub tidlig med en melding som forklarer at ingenting skjedde. - Kun når begge sjekker er bestått, vis en siste MsgBox med teksten "Customer would be deleted here."
1. Hente Customer ID og bygge bekreftelsen
InputBoxtrenger en melding og kan ta en tittel som andre argument — lagre det som returneres i enString-variabel.- Bekreftelsesmeldingen må ha den faktiske ID-en satt inn med
&, ikke skrevet som en fast streng — ellers vil det alltid stå "[ID]" bokstavelig. MsgBoxbrukt som funksjon (for å fange resultatet) trenger parenteser; kombinervbYesNoogvbQuestionmed+.
2. Håndtering av Avbryt og Nei
- Sjekk for tom streng rett etter
InputBox-linjen, før du prøver å bygge en bekreftelsesmelding — det er ingen vits i å spørre "Delete customer?" hvis det ikke finnes en ID å slette. Exit Substopper prosedyren umiddelbart der den står — bruk den rett inne i hverIf-blokk, med enMsgBoxrett før som forklarer at ingenting skjedde.vbNo-sjekken kommer etter bekreftelses-MsgBox, og sammenligner resultatet du fanget mot konstantenvbNo.
3. Den siste bekreftelsen
- Denne linjen kjøres bare hvis utførelsen når den — siden begge de tidligere sjekkene bruker
Exit Subved feil, er det nok å plassere denneMsgBoxetter begge sjekkene for å garantere at den kun vises når begge er bestått.
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
Kjør den (F5) og prøv alle tre veier: klikk Avbryt i InputBox, klikk Nei i bekreftelsen, og til slutt skriv inn en ID og klikk Ja — hver skal gi en av de tre ulike meldingene.
Takk for tilbakemeldingene dine!