The Kurssin varauslomake on yksinkertainen muoto, joka kuvaa UserForm -suunnittelun periaatteita ja niihin liittyvää VBA -koodausta.
Se käyttää erilaisia säätimiä, kuten tekstiruutuja, yhdistelmäruutuja, kehykseen ryhmiteltyjä asetuspainikkeita, valintaruutuja ja komentopainikkeita.
Kun käyttäjä napsauttaa OK -painiketta, hänen syötteensä syötetään laskentataulukon seuraavaan käytettävissä olevaan riviin.
Excel -lomakkeen kuvaus:
Siinä on kaksi yksinkertaista tekstiruutua (Nimi: ja Puhelin:), johon käyttäjä voi kirjoittaa vapaata tekstiä, ja kaksi yhdistelmäruutua (Osasto ja Kurssi), jonka avulla käyttäjä voi valita kohteen luettelosta.
Vaihtoehtoja on kolme (Johdanto, Keskitaso ja Pitkälle kehittynyt) ryhmitelty kehykseen (Taso), jotta käyttäjä voi valita vain yhden vaihtoehdoista.
Valintaruutuja on kaksi (Lounas pakollinen ja Kasvissyöjä), koska koska niitä ei ole ryhmitelty kehykseen, voidaan tarvittaessa valita molemmat. Jos varauksen tekijä ei kuitenkaan halua lounasta, meidän ei tarvitse tietää, ovatko he kasvissyöjiä vai eivät. Joten Kasvissyöjä valintaruutu on harmaa, kunnes sitä tarvitaan.
Komentopainikkeita on kolme (OK, Peruuttaa ja Tyhjennä lomake), joista jokainen suorittaa ennalta määritetyn toiminnon napsautettaessa.
Ohjausominaisuuksien asetukset:
Ohjaus | Tyyppi | Omaisuus | Asetus |
UserForm | UserForm | Nimi | frmCourseBooking |
Kuvateksti | Kurssin varauslomake | ||
Nimi | Tekstilaatikko | Nimi | txtName |
Puhelin | Tekstilaatikko | Nimi | txtPuhelin |
Osasto | Yhdistelmälaatikko | Nimi | cboDepartment |
Kurssi | Yhdistelmälaatikko | Nimi | cboCourse |
Taso | Runko | Nimi | fraLevel |
Kuvateksti | Taso | ||
Johdanto | Vaihtoehto -painike | Nimi | optJohdanto |
Keskitaso | Vaihtoehto -painike | Nimi | optIntermediate |
Pitkälle kehittynyt | Vaihtoehto -painike | Nimi | optAdvanced |
Lounas pakollinen | Valintaruutu | Nimi | chkLounas |
Kasvissyöjä | Valintaruutu | Nimi | chkVegetarian |
Käytössä | Väärä | ||
OK | Komento -painike | Nimi | cmdOk |
Kuvateksti | OK | ||
Oletus | Totta | ||
Peruuttaa | Komento -painike | Nimi | cmdCancel |
Kuvateksti | Peruuttaa | ||
Peruuttaa | Totta | ||
Tyhjennä lomake | Komento -painike | Nimi | cmdClearForm |
Lomakkeiden luominen Excelissä
Jos haluat luoda lomakkeen itse, kopioi yllä olevan kuvan mukainen asettelu. Noudata seuraavia ohjeita:
1. Avaa työkirja, johon haluat lomakkeen kuuluvan (käyttäjämuodot, kuten makrot, on liitettävä työkirjaan) ja vaihda Visual Basic Editoriin.
2. Napsauta Visual Basic Editorissa Lisää UserForm -painiketta (tai siirry kohtaan Lisää> UserForm).
3. Jos työkalupakki ei näy itsestään (varmista, ettei se piilota napsauttamalla ensin lomaketta), napsauta Työkalupakki -painiketta (tai siirry kohtaan Näytä> Työkaluryhmä).
4. Jos haluat asettaa ohjausobjektin lomakkeelle, napsauta työkalupakin asianmukaista painiketta ja napsauta lomaketta. Säätimiä voidaan siirtää vetämällä niitä reunoista tai muuttaa kokoa vetämällä painikkeita kehän ympärillä.
5. Jos haluat muokata ohjausobjektin ominaisuuksia, varmista, että valittu ohjausobjekti on valittu ja tee sitten tarvittavat muutokset Ominaisuudet ikkuna. Jos et näe ominaisuusikkunaa, siirry Näytä> Ominaisuudet -ikkuna.
6. Voit poistaa ohjausobjektin lomakkeesta valitsemalla sen ja napsauttamalla Poistaa näppäintä.
UserForm ei itse tee mitään ennen kuin lomaketta ohjaava koodi ja sen eri ohjaimet on luotu. Seuraava vaihe on kirjoittaa koodi, joka ohjaa itse lomaketta.
Koodin lisääminen: 1 Lomakkeen alustaminen
Lomakkeen alustaminen:
Useimmat lomakkeet tarvitsevat jonkinlaisia asetuksia, kun ne avautuvat. Tämä voi määrittää oletusarvoja, varmistaa, että kentät ovat tyhjiä tai luoda yhdistelmäruutuluetteloita. Tätä prosessia kutsutaan Alustetaan lomake ja siitä huolehtii makro nimeltä UserForm_Initialize (jos olet hämmentynyt sanani "initialis (z) e" vaihtelevasta oikeinkirjoituksesta, se johtuu siitä, että puhun englantia ja VBA puhuu amerikkalaista - mutta älä huoli, VBA kirjoita se puolestasi!). Näin voit luoda koodin kurssivarauslomakkeen alustamiseksi:
1. Voit tarkastella lomakkeen koodi -ikkunaa osoitteessa Näytä> Koodi tai napsauta F7.
2. Kun koodi -ikkuna avautuu ensimmäisen kerran, siinä on tyhjä UserForm_Click () menettelyä. Valitse koodi-ikkunan yläosassa olevista avattavista luetteloista UserForm ja Alustaa. Tämä luo tarvitsemasi menettelyn. Voit nyt poistaa UserForm_Click () -menettelyn.
3. Kirjoita seuraava koodi menettelyyn:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" With cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch". AddItem "Transportation" End With cboDepartment.Value = "" With cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" End With cboCourse.Value = "" optIntroduction = True chkLunch = False chkVegetarian = Väärä txtName.SetFocus End Sub
Alustuskoodin toiminta:
UserForm_Initialize () -menettelyn tarkoituksena on valmistella käyttölomake VBA: ssa käyttöä varten, asettaa eri ohjainten oletusarvot ja luoda luettelot, jotka yhdistelmäruudut näyttävät.
Nämä rivit asettavat kahden tekstiruudun sisällön tyhjäksi:
txtName.Value = "" txtPhone.Value = ""
Seuraavaksi tulevat yhdistelmälaatikoiden ohjeet. Ensin määritetään luettelon sisältö ja yhdistelmäruudun alkuperäinen arvo asetetaan tyhjäksi.
CboDepartment .AddItem "Myynti" .AddItem "Markkinointi" (niin monta kuin tarvitaan …) Lopeta
cboDepartment.Value = ""
Tarvittaessa ensimmäinen valinta voidaan tehdä optioryhmästä, tässä tapauksessa:
optIntroduction = Totta
Molemmat valintaruudut on asetettu arvoon False (eli ei rasti). Valitse Tosi, jos haluat, että valintaruutu näkyy jo valittuna:
chkLunch = Väärä
chkVegetarian = Väärä
Lopuksi kohdistus siirretään ensimmäiseen tekstiruutuun. Tämä asettaa käyttäjän kohdistimen tekstiruutuun, jotta heidän ei tarvitse napsauttaa ruutua ennen kuin he alkavat kirjoittaa:
txtName.SetFocus
Koodin lisääminen: 2 Painikkeiden toimiminen
Lomakkeessa on kolme komentopainiketta, ja kullakin niistä on oltava oma toimintatapansa. Aloitetaan yksinkertaisista…
Peruutuspainikkeen koodaus:
Aiemmin käytimme Ominaisuudet -ikkunaa asettaaksesi Peruuttaa Peruuta -painikkeen ominaisuus Totta. Kun asetat Komento -painikkeen Peruuta -ominaisuuden arvoksi Tosi, tämä napsauttaa kyseistä painiketta, kun käyttäjä painaa poistu näppäintä. Mutta tämä yksin ei aiheuta lomakkeelle mitään. Sinun on luotava koodi painikkeen napsautustapahtumaan, joka tässä tapauksessa sulkee lomakkeen. Toimi seuraavasti:
1. Kun UserForm on avattu muokattavaksi Visual Basic Editorissa, kaksoisnapsauta Peruuta-painiketta. Lomakkeen koodi -ikkuna avautuu cmdCancel_Click () menettely on valmis muokkausta varten.
2. Lomakkeen sulkemiskoodi on hyvin yksinkertainen. Lisää koodirivi menettelyyn, jotta se näyttää tältä:
Yksityinen ali cmdCancel_Click () Unload Me End Sub
Tyhjennä lomake -painikkeen koodaus:
Lisäsin painikkeen lomakkeen tyhjentämiseksi siltä varalta, että käyttäjä haluaisi muuttaa mieltään ja nollata kaiken, ja helpottaakseen sitä, jos hänellä olisi useita varauksia kerralla. Sinun tarvitsee vain suorittaa Initialise -menettely uudelleen. Makro voidaan kehottaa suorittamaan toinen makro (tai tarvittaessa makrosarja) käyttämällä Soittaa puhelimella avainsana:
1. Kaksoisnapsauta Tyhjennä lomake -painiketta. Lomakkeen koodi -ikkuna avautuu cmdClearForm_Click () menettely on valmis muokkausta varten.
2. Lisää koodirivi menettelyyn, jotta se näyttää tältä:
Yksityinen ali cmdClearForm_Click () Soita UserForm_Initialize End Sub
OK -painikkeen koodaus:
Tämä on koodinpala, jonka tehtävänä on siirtää käyttäjän valinnat ja tekstinsyöttö laskentataulukkoon. Kun asetamme Peruuta -painikkeen Peruuta -ominaisuuden arvoksi Tosi, asetamme myös OK -painikkeen Oletus omaisuutta Totta. Tämä on napsauttamalla OK -painiketta, kun käyttäjä painaa Tulla sisään (tai Palata) -näppäintä (jos he eivät ole käyttäneet näppäimistöä Välilehti näppäimestä toiseen välilehteen). Tässä on koodi, jolla painike toimii:
1. Kaksoisnapsauta OK-painiketta. Lomakkeen koodi -ikkuna avautuu cmdOK_Click () menettely on valmis muokkausta varten.
2. Lisää seuraava koodi muokkaamalla menettelyä:
Yksityinen ali cmdOK_Click () ActiveWorkbook.Sheets ("Kurssivaraukset"). Aktivoi alue ("A1"). Valitse Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0) .Valitse End if Loop Before IsEmpty (ActiveCell) = True ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value If optIntroduction = Tosi sitten ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Sitten ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End If Jos chkLunch = True Sitten ActiveCell.Offset (0, 5) .Arvo = "Kyllä" Else ActiveCell.Offset (0, 5) .Value = "No" End If If chkVegetarian = True Sitten ActiveCell.Offset (0, 6). Arvo = "Kyllä" Else Jos chkLunch = False Sitten ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "Ei" End If End If Range ("A1"). Valitse Lopeta alaosa
Miten CmdOK_Click -koodi toimii:
Kaksi ensimmäistä riviä varmistavat, että oikea työkirja on aktiivinen ja siirtää valinnan soluun A1:
ActiveWorkbook.Sheets ("Kurssivaraukset"). Aktivoi alue ("A1"). Valitse Muutama seuraava rivi siirtää valintaa laskentataulukossa alaspäin, kunnes se löytää tyhjän solun: Do If IsEmpty (ActiveCell) = False then ActiveCell.Offset (1 Valitse End If Loop Before IsEmpty (ActiveCell) = True
Seuraavat neljä riviä alkavat kirjoittaa lomakkeen sisällön laskentataulukolle käyttämällä aktiivista solua (joka on sarakkeessa A) viitteenä ja siirtymässä rivillä solu kerrallaan:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Nyt pääsemme vaihtoehtojen painikkeisiin. Nämä on sijoitettu lomakkeen kehykseen, jotta käyttäjä voi valita vain yhden. IF -käskyä käytetään opettamaan Excelille, mitä kullekin vaihtoehdolle:
If optIntroduction = True Sitten ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Sitten ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End Jos
VBA IF -lausekkeita on paljon helpompi hallita kuin Excelin IF -toimintoa. Sinulla voi olla niin monta vaihtoehtoa kuin haluat, lisää vain yksi lisävaruste Muuten jos jokaiselle. Jos vaihtoehtoja on vain kaksi, et tarvitse niitä Muuten jos, vain se Jos ja Muu riittää (älä unohda - he kaikki tarvitsevat Loppu Jos).
Jokaiselle valintaruudulle on toinen IF -lauseke. Lounaan pakollinen -valintaruudussa rasti ruudussa tarkoittaa "kyllä", henkilö tarvitsee lounaan, ja ei rasti tarkoittaa "ei" he eivät.
Jos chkLunch = True Sitten ActiveCell.Offset (0, 5) .Arvo = "Kyllä" Muu ActiveCell.Offset (0, 5) .Value = "Ei" Lopeta
Voisimme käyttää samanlaista IF -lausuntoa kasvissyöjä -valintaruudussa, mutta jos henkilö ei tarvitse lounasta, sillä ei ole merkitystä, onko hän kasvissyöjä vai ei. Joka tapauksessa olisi väärin olettaa, etteivät he olleet kasvissyöjiä vain siksi, että he eivät tarvinneet lounasta. IF -käsky sisältää siis toisen, sisäkkäisen if -lauseen:
If chkVegetarian = True Sitten ActiveCell.Offset (0, 6) .Value = "Yes" Else If chkLunch = False Sitten ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "Ei" Lopeta Jos loppu Jos
Rasti ruudussa tarkoittaa "kyllä" henkilö on kasvissyöjä. Jos ruudussa ei ole valintamerkkiä, sisäkkäin sijoitettu IF -lause näyttää Lounas pakollinen -valintaruudun. Jos Lounas vaaditaan -valintaruudussa on rasti, ei kasvissyöjä -valintaruudun merkitseminen merkitse sitä, että henkilö ei ole kasvissyöjä, joten se lisää "Ei" soluun. Jos Lounas vaaditaan -valintaruudussa ei kuitenkaan ole rastiä, emme tiedä, onko henkilö kasvissyöjä (sillä ei ole väliä), joten solu jätetään tyhjäksi ("").
Lopuksi valinta palautetaan laskentataulukon alkuun, valmiina seuraavaan merkintään:
Alue ("A1"). Valitse
Koodin 3 lisääminen: Lomakkeen käsittely
Lopuksi esimerkki siitä, miten lomakkeen säätimiä voidaan käsitellä käytön aikana. Kun ohjausominaisuudet oli asetettu, Käytössä Kasvissyöjä -valintaruudun ominaisuudeksi asetettiin Väärä. Kun ohjaus ei ole käytössä, käyttäjä ei voi syöttää arvoa siihen, vaikka siihen mahtuu jo olemassa oleva arvo, ja VBA voi lisätä, poistaa tai muuttaa arvoa.
Meidän ei tarvitse tietää onko henkilö kasvissyöjä (vaikka olisikin!), Jos hän ei tilaa lounasta. Kasvissyöjä -valintaruutu on siis poistettu käytöstä, ellei lounasta vaadita -valintaruutuun ole merkitty rasti. Käyttäjä voi halutessaan valita Kasvisruoka -valintaruudun. Jos he rastittavat sen, tiedämme, että he ovat vastanneet "kyllä" ja jos eivät, tiedämme, että he ovat vastanneet "ei".
Voimme vaihtaa Käytössä kiinteistö alkaen Väärä kohteeseen Totta ottamalla käyttöön menettely, joka suoritetaan automaattisesti aina, kun Lounas vaaditaan -valintaruudun arvo muuttuu. Onneksi enemmän ohjaimia on Muuttaa ja käytämme tässä chkLunch_Change (). Käytämme tätä ottaaksemme Kasvissyöjä -valintaruudun käyttöön, kun lounas vaaditaan -valintaruutu on valittuna, ja poistamme sen käytöstä, kun lounaspakollinen valintaruutu ei ole valittuna.
Meidän on tehtävä vielä yksi asia. Olettaen, että joku on valinnut Lounas pakollinen -valintaruudun ja myös Kasvisruoka -valintaruudun. Sitten he muuttivat mieltään ja poistivat valinnan Lounas vaaditaan -valintaruudusta. Kasvissyöjä -valintaruutu poistettaisiin käytöstä, mutta aiemmin lisätty rasti jää jäljelle.
Ylimääräinen koodirivi voi varmistaa, että rasti poistetaan, kun laatikko on poistettu käytöstä. Tässä on koko juttu:
Yksityinen osa chkLunch_Change () If chkLunch = True Sitten chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Lomakkeen avaaminen
Lomake on nyt käyttövalmis, joten se on avattava yksinkertaisella makrolla. Se voidaan liittää mukautettuun työkalupalkin painikkeeseen, laskentataulukkoon piirrettyyn komentopainikkeeseen tai mihin tahansa grafiikkaan (napsauta kuvaa hiiren kakkospainikkeella ja valitse Määritä makro). Luo tarvittaessa työkirjaan uusi moduuli ja lisää tämä menettely:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Jos pidit blogistamme, jaa se ystävillesi Facebookissa. Voit myös seurata meitä Twitterissä ja Facebookissa.
Haluaisimme kuulla sinusta, kerro meille, kuinka voimme parantaa, täydentää tai innovoida työtämme ja parantaa sitä sinulle. Kirjoita meille sähköpostitse