Viestiruudut ja syöttöruudut
Pyyhkäise näyttääksesi valikon
Ennen kuin rakennat täyden lomakkeen, kannattaa hallita kaksi yksinkertaisinta tapaa, joilla VBA voi olla vuorovaikutuksessa käyttäjän kanssa: MsgBox, joka näyttää tietoa ja voi tarvittaessa esittää kysymyksen, sekä InputBox, joka pyytää lyhyen tekstivastauksen.
MsgBox
Yksinkertaisimmillaan MsgBox vain näyttää viestin ja odottaa, että käyttäjä napsauttaa OK:
MsgBox "Customer saved successfully."
Tässä käytössä — lauseena, ilman sulkuja ja ilman tuloksen tallentamista — MsgBox on päätepiste: se näyttää viestin ja koodi jatkuu eteenpäin riippumatta siitä, mitä käyttäjä tekee. Heti kun tarvitset tiedon siitä, mitä painiketta napsautettiin, MsgBox muuttuu funktioksi lauseen sijaan, mikä tarkoittaa, että tarvitaan sulut ja jokin muuttuja tuloksen tallentamiseen:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo ja vbQuestion yhdistetään tavallisella +-merkillä, mikä voi aluksi näyttää oudolta, mutta on vain VBA:n tapa yhdistää kaksi erillistä asetusta — mitkä painikkeet näytetään ja mikä kuvake näytetään — MsgBoxin odottamaksi toiseksi argumentiksi. result saa arvokseen yhden VBA:n sisäänrakennetuista vakioista, vbYes tai vbNo, jotka ovat todellisuudessa vain numeroita (6 ja 7, mutta näitä ei kirjoiteta suoraan). Toiminnon ohjaaminen vastauksen perusteella onnistuu tavallisella If-rakenteella:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Missä MsgBox palauttaa aina vain ennalta määritellyn joukon painikekonstantteja, InputBox pyytää käyttäjää kirjoittamaan jotain ja palauttaa juuri sen, mitä käyttäjä syöttää:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
Kolmas argumentti, tässä "Chicago", esitäyttää tekstikentän — hyödyllinen tapa ehdottaa todennäköistä vastausta, jonka käyttäjä voi hyväksyä tai korvata. Kaksi yksityiskohtaa on helppo tehdä väärin ensimmäisellä kerralla: mitä tahansa käyttäjä kirjoittaa, se palautetaan String-muodossa riippumatta siitä, miltä se näyttää, joten esimerkiksi 25 palauttaa tekstin "25", ei lukua 25, ja sinun täytyy käyttää CInt tai CDbl ennen kuin teet sillä laskutoimituksia; ja kun käyttäjä painaa Peruuta, se ei aiheuta virhettä eikä pysäytä koodia — se vain palauttaa tyhjän merkkijonon (""), jonka koodin täytyy tarkistaa erikseen, jos tyhjä vastaus ei ole sallittu.
Käyttäjän kehotteet ja vahvistukset
Näiden kahden yhdistäminen on vakiokaava kaikille toiminnoille, joissa luetaan käyttäjän syöte ja sitten vahvistetaan ennen riskialttiin toiminnon suorittamista:
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
Huomaa, että confirmMsg on määritelty As VbMsgBoxResult eikä yleisenä tyyppinä — tämä on nimetty tyyppi, jota VBA käyttää MsgBoxin paluuarvolle, ja sen eksplisiittinen määrittely (sen sijaan, että jättäisi sen Variantiksi) mahdollistaa VBE:n tarjoaman automaattisen täydennyksen arvoille kuten vbYes, vbNo ja muille kirjoittaessasi. Tyhjän merkkijonon tarkistus InputBoxin jälkeen ja vbNo-tarkistus MsgBoxin jälkeen käyttävät samaa poistumiskaavaa, Exit Sub, joka pysäyttää proseduurin välittömästi sen sijaan, että koodi jatkaisi eteenpäin olettaen, että syöte on kelvollinen.
Tehtävä
- Kirjoita
Sub, joka käyttääInputBox-toimintoa kysyäkseen asiakasnumeroa (Customer ID) ja sitten MsgBoxia vahvistaakseen "Poistetaanko asiakas [ID]?" Kyllä/Ei-painikkeilla ja kysymysmerkkikuvakkeella. - Käsittele sekä tyhjän merkkijonon tapaus (käyttäjä painoi Peruuta InputBoxissa) että
vbNo-tapaus (käyttäjä hylkäsi vahvistuksen) poistumalla Subista heti ja näyttämällä viesti, jossa kerrotaan ettei mitään tapahtunut. - Vain jos molemmat tarkistukset menevät läpi, näytä lopuksi MsgBox, jossa lukee "Tässä kohtaa asiakas poistettaisiin."
1. Asiakasnumeron hakeminen ja vahvistuksen rakentaminen
InputBoxtarvitsee kehotteen ja voi ottaa otsikon toisena argumenttina — tallenna palautettu arvoString-muuttujaan.- Vahvistusviestiin tulee liittää oikea asiakasnumero yhdistämällä se
&-operaattorilla, ei kirjoittaa kiinteänä merkkijonona — muuten viesti näyttäisi aina kirjaimellisesti "[ID]". - Kun
MsgBox-funktiota käytetään tuloksen tallentamiseen, tarvitaan sulut; yhdistävbYesNojavbQuestionyhteen+-merkillä.
2. Peruuta- ja Ei-tapausten käsittely
- Tarkista tyhjän merkkijonon tapaus heti
InputBox-rivin jälkeen, ennen kuin rakennat vahvistusviestiä — ei ole järkeä kysyä "Poistetaanko asiakas?" jos asiakasnumeroa ei ole annettu. Exit Sublopettaa toimenpiteen välittömästi missä tahansa kohdassa — käytä sitä suoraan jokaisenIf-lohkon sisällä, ja näytä juuri ennen sitäMsgBox, jossa kerrotaan ettei mitään tapahtunut.vbNo-tarkistus tehdään vahvistus-MsgBoxin jälkeen vertaamalla tallennettua tulostavbNo-vakioon.
3. Lopullinen vahvistus
- Tämä rivi suoritetaan vain, jos suoritus pääsee siihen asti — koska molemmat aiemmat tarkistukset käyttävät
Exit Sub-komentoa epäonnistuessaan, riittää että tämäMsgBoxsijoitetaan molempien tarkistusten jälkeen, jotta se suoritetaan vain kun molemmat ovat menneet läpi.
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
Suorita makro (F5) ja kokeile kaikkia kolmea polkua: paina Peruuta InputBox, paina Ei vahvistuksessa ja lopuksi syötä asiakasnumero ja paina Kyllä — jokaisen pitäisi tuottaa eri kolmesta viestistä.
Kiitos palautteestasi!
Kysy tekoälyä
Kysy tekoälyä
Kysy mitä tahansa tai kokeile jotakin ehdotetuista kysymyksistä aloittaaksesi keskustelumme
Viestiruudut ja syöttöruudut
Ennen kuin rakennat täyden lomakkeen, kannattaa hallita kaksi yksinkertaisinta tapaa, joilla VBA voi olla vuorovaikutuksessa käyttäjän kanssa: MsgBox, joka näyttää tietoa ja voi tarvittaessa esittää kysymyksen, sekä InputBox, joka pyytää lyhyen tekstivastauksen.
MsgBox
Yksinkertaisimmillaan MsgBox vain näyttää viestin ja odottaa, että käyttäjä napsauttaa OK:
MsgBox "Customer saved successfully."
Tässä käytössä — lauseena, ilman sulkuja ja ilman tuloksen tallentamista — MsgBox on päätepiste: se näyttää viestin ja koodi jatkuu eteenpäin riippumatta siitä, mitä käyttäjä tekee. Heti kun tarvitset tiedon siitä, mitä painiketta napsautettiin, MsgBox muuttuu funktioksi lauseen sijaan, mikä tarkoittaa, että tarvitaan sulut ja jokin muuttuja tuloksen tallentamiseen:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo ja vbQuestion yhdistetään tavallisella +-merkillä, mikä voi aluksi näyttää oudolta, mutta on vain VBA:n tapa yhdistää kaksi erillistä asetusta — mitkä painikkeet näytetään ja mikä kuvake näytetään — MsgBoxin odottamaksi toiseksi argumentiksi. result saa arvokseen yhden VBA:n sisäänrakennetuista vakioista, vbYes tai vbNo, jotka ovat todellisuudessa vain numeroita (6 ja 7, mutta näitä ei kirjoiteta suoraan). Toiminnon ohjaaminen vastauksen perusteella onnistuu tavallisella If-rakenteella:
If result = vbYes Then
' proceed with deletion
End If
InputBox
Missä MsgBox palauttaa aina vain ennalta määritellyn joukon painikekonstantteja, InputBox pyytää käyttäjää kirjoittamaan jotain ja palauttaa juuri sen, mitä käyttäjä syöttää:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
Kolmas argumentti, tässä "Chicago", esitäyttää tekstikentän — hyödyllinen tapa ehdottaa todennäköistä vastausta, jonka käyttäjä voi hyväksyä tai korvata. Kaksi yksityiskohtaa on helppo tehdä väärin ensimmäisellä kerralla: mitä tahansa käyttäjä kirjoittaa, se palautetaan String-muodossa riippumatta siitä, miltä se näyttää, joten esimerkiksi 25 palauttaa tekstin "25", ei lukua 25, ja sinun täytyy käyttää CInt tai CDbl ennen kuin teet sillä laskutoimituksia; ja kun käyttäjä painaa Peruuta, se ei aiheuta virhettä eikä pysäytä koodia — se vain palauttaa tyhjän merkkijonon (""), jonka koodin täytyy tarkistaa erikseen, jos tyhjä vastaus ei ole sallittu.
Käyttäjän kehotteet ja vahvistukset
Näiden kahden yhdistäminen on vakiokaava kaikille toiminnoille, joissa luetaan käyttäjän syöte ja sitten vahvistetaan ennen riskialttiin toiminnon suorittamista:
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
Huomaa, että confirmMsg on määritelty As VbMsgBoxResult eikä yleisenä tyyppinä — tämä on nimetty tyyppi, jota VBA käyttää MsgBoxin paluuarvolle, ja sen eksplisiittinen määrittely (sen sijaan, että jättäisi sen Variantiksi) mahdollistaa VBE:n tarjoaman automaattisen täydennyksen arvoille kuten vbYes, vbNo ja muille kirjoittaessasi. Tyhjän merkkijonon tarkistus InputBoxin jälkeen ja vbNo-tarkistus MsgBoxin jälkeen käyttävät samaa poistumiskaavaa, Exit Sub, joka pysäyttää proseduurin välittömästi sen sijaan, että koodi jatkaisi eteenpäin olettaen, että syöte on kelvollinen.
Tehtävä
- Kirjoita
Sub, joka käyttääInputBox-toimintoa kysyäkseen asiakasnumeroa (Customer ID) ja sitten MsgBoxia vahvistaakseen "Poistetaanko asiakas [ID]?" Kyllä/Ei-painikkeilla ja kysymysmerkkikuvakkeella. - Käsittele sekä tyhjän merkkijonon tapaus (käyttäjä painoi Peruuta InputBoxissa) että
vbNo-tapaus (käyttäjä hylkäsi vahvistuksen) poistumalla Subista heti ja näyttämällä viesti, jossa kerrotaan ettei mitään tapahtunut. - Vain jos molemmat tarkistukset menevät läpi, näytä lopuksi MsgBox, jossa lukee "Tässä kohtaa asiakas poistettaisiin."
1. Asiakasnumeron hakeminen ja vahvistuksen rakentaminen
InputBoxtarvitsee kehotteen ja voi ottaa otsikon toisena argumenttina — tallenna palautettu arvoString-muuttujaan.- Vahvistusviestiin tulee liittää oikea asiakasnumero yhdistämällä se
&-operaattorilla, ei kirjoittaa kiinteänä merkkijonona — muuten viesti näyttäisi aina kirjaimellisesti "[ID]". - Kun
MsgBox-funktiota käytetään tuloksen tallentamiseen, tarvitaan sulut; yhdistävbYesNojavbQuestionyhteen+-merkillä.
2. Peruuta- ja Ei-tapausten käsittely
- Tarkista tyhjän merkkijonon tapaus heti
InputBox-rivin jälkeen, ennen kuin rakennat vahvistusviestiä — ei ole järkeä kysyä "Poistetaanko asiakas?" jos asiakasnumeroa ei ole annettu. Exit Sublopettaa toimenpiteen välittömästi missä tahansa kohdassa — käytä sitä suoraan jokaisenIf-lohkon sisällä, ja näytä juuri ennen sitäMsgBox, jossa kerrotaan ettei mitään tapahtunut.vbNo-tarkistus tehdään vahvistus-MsgBoxin jälkeen vertaamalla tallennettua tulostavbNo-vakioon.
3. Lopullinen vahvistus
- Tämä rivi suoritetaan vain, jos suoritus pääsee siihen asti — koska molemmat aiemmat tarkistukset käyttävät
Exit Sub-komentoa epäonnistuessaan, riittää että tämäMsgBoxsijoitetaan molempien tarkistusten jälkeen, jotta se suoritetaan vain kun molemmat ovat menneet läpi.
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
Suorita makro (F5) ja kokeile kaikkia kolmea polkua: paina Peruuta InputBox, paina Ei vahvistuksessa ja lopuksi syötä asiakasnumero ja paina Kyllä — jokaisen pitäisi tuottaa eri kolmesta viestistä.
Kiitos palautteestasi!