The Kursuse broneerimise vorm on lihtne vorm, mis illustreerib UserFormi disaini põhimõtteid ja nendega seotud VBA kodeerimist.
See kasutab valikut juhtelemente, sealhulgas tekstivälju, liitkaste, raamisse koondatud valikunuppe, märkeruute ja käsunuppe.
Kui kasutaja klõpsab nupul OK, sisestatakse tema sisend töölehe järgmisele saadaolevale reale.
Exceli vormi kirjeldus:
Seal on kaks lihtsat tekstikasti (Nimi: ja Telefon:), kuhu kasutaja saab sisestada vaba teksti, ja kaks liitkasti (Osakond ja Kursus), mis võimaldab kasutajal loendist üksuse valida.
Seal on kolm valikunuppu (Sissejuhatus, Vahepealne ja Täpsem) on koondatud raami (Tase), et kasutaja saaks valida ainult ühe võimalustest.
Seal on kaks märkeruutu (Nõutav lõunasöök ja Taimetoitlane), kuna neid ei ole raami koondatud, saab neid vajadusel valida. Kui aga broneeringu teinud isik ei soovi lõunasööki, ei pea me teadma, kas ta on taimetoitlane või mitte. Seega Taimetoitlane märkeruut on kuni soovimiseni hall.
Seal on kolm käsunuppu (Okei, Tühista ja Selge vorm), millest igaüks täidab klõpsamisel eelnevalt määratletud funktsiooni.
Juhtelemendi atribuutide sätted:
Kontroll | Tüüp | Kinnisvara | Seadistamine |
UserForm | UserForm | Nimi | frmCourseBooking |
Pealkiri | Kursuse broneerimise vorm | ||
Nimi | Tekstikasti | Nimi | txtName |
Telefon | Tekstikasti | Nimi | txtTelefon |
Osakond | Liitkast | Nimi | cboDepartement |
Kursus | Liitkast | Nimi | cboCourse |
Tase | Raam | Nimi | fraLevel |
Pealkiri | Tase | ||
Sissejuhatus | Valikunupp | Nimi | opt Sissejuhatus |
Vahepealne | Valikunupp | Nimi | optIntermediate |
Täpsem | Valikunupp | Nimi | optAdvanced |
Nõutav lõunasöök | Märkige ruut | Nimi | chkLunch |
Taimetoitlane | Märkige ruut | Nimi | chkTaimetoitlane |
Lubatud | Vale | ||
Okei | Käsunupp | Nimi | cmdOk |
Pealkiri | Okei | ||
Vaikimisi | Tõsi | ||
Tühista | Käsunupp | Nimi | cmdCancel |
Pealkiri | Tühista | ||
Tühista | Tõsi | ||
Selge vorm | Käsunupp | Nimi | cmdClearForm |
Vormide loomine Excelis
Kui soovite vormi ise koostada, kopeerige lihtsalt ülaltoodud joonisel näidatud paigutus. Järgige alltoodud samme.
1. Avage töövihik, kuhu soovite vormi kuuluda (töövihikusse tuleb lisada kasutajavormid, näiteks makrod) ja lülitage Visual Basic Editor.
2. Klõpsake Visual Basic Editoris nuppu Sisestage UserForm nuppu (või minge aadressile Sisesta> UserForm).
3. Kui tööriistakast ei ilmu iseenesest (klõpsake esmalt vormil, veendumaks, et see ei peitu), klõpsake nuppu Tööriistakast nuppu (või minge aadressile Vaade> Tööriistakast).
4. Vormile juhtelemendi paigutamiseks klõpsake tööriistakastil vastavat nuppu ja seejärel vormi. Juhtelemente saab liigutada, lohistades neid servadest, või muuta nende suurust, lohistades nuppe ümbermõõdu ulatuses.
5. Juhtelemendi atribuutide muutmiseks veenduge, et valitud juhtelement on valitud ja seejärel tehke vastavad muudatused Omadused aken. Kui te ei näe atribuutide akent, minge Vaade> Atribuutide aken.
6. Juhtelemendi vormilt eemaldamiseks valige see ja klõpsake nuppu Kustuta klahvi klaviatuuril.
UserForm ei tee tegelikult midagi enne, kui vormi käivitav kood ja selle erinevad juhtelemendid on loodud. Järgmine samm on kirjutada kood, mis juhib vormi ise.
Koodi lisamine: 1 Vormi vormindamine
Vormi initsialiseerimine:
Enamik vorme vajab avamisel mingit seadistamist. See võib olla vaikeväärtuste määramine, veendumine, et väli on tühi, või liitkastide loendite koostamine. Seda protsessi nimetatakse Vormi initsialiseerimine ja selle eest hoolitseb makro nimega UserForm_Initialize (juhul kui mind segab sõna "initialis (z) e" erinev kirjapilt, on see sellepärast, et ma räägin inglise keelt ja VBA räägib ameerika keelt - aga ärge muretsege, VBA kirjutage see teie jaoks!). Kursuse broneerimisvormi lähtestamiseks koodi koostamiseks tehke järgmist.
1. Vormi koodiakna vaatamiseks minge aadressile Vaade> Kood või klõpsake F7.
2. Koodiakna esmakordsel avamisel sisaldab see tühja kohta UserForm_Click () protseduuri. Valimiseks kasutage koodiakna ülaosas olevaid ripploendeid UserForm ja Initsialiseeri. See loob vajaliku protseduuri. Nüüd saate UserForm_Click () protseduuri kustutada.
3. Sisestage protseduurile järgmine kood:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" Koos cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch". AddItem "Transport" Lõpp koos cboDepartment.Value = "" Koos cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" Lõpeta koos cboCourse.Value = "" optIntroduction = True chkLunch = Vale chkVegetarian = Vale txtName.SetFocus End Sub
Kuidas lähtestamiskood toimib:
Menetluse UserForm_Initialize () eesmärk on ette valmistada VBA -s kasutajavorm kasutamiseks, seada erinevate juhtelementide vaikeväärtused ja luua loendid, mida kombineeritud kastid kuvavad.
Need read määravad kahe tekstivälja sisu tühjaks:
txtName.Value = "" txtPhone.Value = ""
Järgmisena tulevad liitkastide juhised. Esiteks määratakse loendi sisu, seejärel seatakse liitkasti algväärtuseks tühi.
Koos cboDepartment .AddItem "Müük" .AddItem "Turundus" (nii palju kui vaja …) Lõpeta
cboDepartment.Value = ""
Vajadusel saab optsioonirühmast teha esialgse valiku, sel juhul:
optIntroduction = Tõsi
Mõlemad märkeruudud on seatud väärtusele Väär (st linnuke puudub). Kui soovite, et märkeruut ilmuks juba märgitud, valige Tõene
chkLunch = Vale
chkVegetarian = Vale
Lõpuks viiakse fookus esimesse tekstikasti. See viib kasutajate kursori tekstikasti, nii et neil pole vaja enne tippimist kasti klõpsata.
txtName.SetFocus
Koodi lisamine: 2 Nuppude toimimine
Vormil on kolm käsunuppu ja igaüks peab töötama vastavalt oma protseduurile. Alustades lihtsatest…
Tühistusnupu kodeerimine:
Varem kasutasime atribuutide akent Tühista at nuppu Tühista Tõsi. Kui määrate käsunupu atribuudi Tühista väärtuseks Tõene, mõjub see sellel nupul klõpsamisel, kui kasutaja vajutab nuppu Esc klahvi nende klaviatuuril. Kuid see üksi ei põhjusta vormiga midagi. Peate looma selle nupu klõpsamissündmuse koodi, mis sel juhul vormi sulgeb. Selleks toimige järgmiselt.
1. Kui UserForm on Visual Basic Editoris redigeerimiseks avatud, topeltklõpsake nuppu Cancel. Vormi koodi aken avaneb koos cmdCancel_Click () toiming on redigeerimiseks valmis.
2. Vormi sulgemise kood on väga lihtne. Lisage protseduurile koodirida, mis näeb välja selline:
Privaatne alam cmdCancel_Click () Unload Me End Sub
Selge vormi nupu kodeerimine:
Lisasin nupu vormi tühjendamiseks juhuks, kui kasutaja soovib oma meelt muuta ja kõik lähtestada, ning lihtsustada, kui tal on korraga mitu broneeringut teha. Piisab vaid käivitada Initialise protseduur uuesti. Makro saab käsu käivitada teise makro (või vajadusel makrosarjade) abil Helistama märksõna:
1. Topeltklõpsake nuppu Kustuta vorm. Vormi koodi aken avaneb koos cmdClearForm_Click () toiming on redigeerimiseks valmis.
2. Lisage protseduurile koodirida, mis näeb välja selline:
Privaatne alam cmdClearForm_Click () Helista UserForm_Initialize End Sub
OK nupu kodeerimine:
See on kood, mis peab tegema kasutaja valikud ja tekstisisestuse töölehele. Kui määrame atribuudi Tühista tühistamise väärtuseks Tõene, seadistame ka nupu OK Vaikimisi vara juurde Tõsi. Selleks klõpsake nuppu OK, kui kasutaja vajutab nuppu Sisenema (või Tagasi) klahvi (eeldusel, et nad pole oma klahve kasutanud Tab klahvi vahekaardilt teisele nupule). Siin on kood nupu toimimiseks:
1. Topeltklõpsake nuppu OK. Vormi koodi aken avaneb koos cmdOK_Click () toiming on redigeerimiseks valmis.
2. Muutke protseduuri järgmise koodi lisamiseks:
Privaatne alam cmdOK_Click () ActiveWorkbook.Sheets ("Kursuse broneeringud"). Aktiveerige vahemik ("A1"). Valige Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0). Valige 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 = Tõene Siis ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Siis ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = "Adv" End If If chkLunch = True Siis ActiveCell.Offset (0, 5) .Value = "Yes" Else ActiveCell.Offset (0, 5) .Value = "No" End If Kui chkVegetarian = True Siis ActiveCell.Offset (0, 6). Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "No" End If End If Range ("A1"). Valige Lõpeta alam
Kuidas CmdOK_Click kood töötab:
Kaks esimest rida tagavad, et õige töövihik on aktiivne ja teisaldab valiku lahtrisse A1:
ActiveWorkbook.Sheets ("Kursuse broneeringud"). Aktiveeri vahemik ("A1"). Vali Järgmised paar rida liigutavad valikut töölehel allapoole, kuni see leiab tühja lahtri: Do If IsEmpty (ActiveCell) = False then ActiveCell.Offset (1 , 0). Valige End if Loop Before IsEmpty (ActiveCell) = True
Järgmised neli rida hakkavad töölehele vormi sisu kirjutama, kasutades viitena aktiivset lahtrit (mis asub veerus A) ja liigutades mööda rida rakk korraga:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Nüüd jõuame valikunuppude juurde. Need on paigutatud vormi raami, nii et kasutaja saab valida ainult ühe. IF -lauset kasutatakse Exceli juhendamiseks, mida iga valiku puhul teha:
If optIntroduction = True Siis ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Siis ActiveCell.Offset (0, 4) .Value = "Intermed" Muu ActiveCell.Offset (0, 4) .Value = "Adv" lõpp Kui
VBA IF -avaldusi on palju lihtsam hallata kui Exceli IF -funktsiooni. Teil võib olla nii palju võimalusi kui soovite, lisage lihtsalt täiendav Muidu igaühe jaoks. Kui oleks ainult kaks võimalust, poleks seda vaja Muidu, lihtsalt Kui ja Muidu piisab (ärge unustage - nad kõik vajavad Lõpp Kui).
Iga märkeruudu kohta on veel üks IF -lause. Märkeruudu Lõunasöök on kohustuslik, kui linnuke kastis tähendab "jah", inimene vajab lõunasööki ja ükski linnuke ei tähenda "ei".
Kui chkLunch = True Siis ActiveCell.Offset (0, 5) .Value = "Jah" Muu ActiveCell.Offset (0, 5) .Väärtus = "Ei" Lõpp
Taimetoitlaste märkeruudu puhul võiksime kasutada sarnast IF -lauset, kuid kui inimene ei vaja lõunasööki, ei ole oluline, kas taimetoitlane on või mitte. Igal juhul oleks vale eeldada, et nad ei olnud taimetoitlased lihtsalt sellepärast, et nad ei nõudnud lõunat. Seetõttu sisaldab IF -lause teist, pesastatud lauset:
If chkVegetarian = True Siis ActiveCell.Offset (0, 6) .Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "Ei" Lõpp Kui lõpp Kui
Märge kastis tähendab "jah", inimene on taimetoitlane. Kui kastis pole linnukest, vaatab pesastatud IF -lause märkeruutu Lõunasöök on kohustuslik. Kui märkeruudus Lõunasöök on nõutav, siis ei märgi taimetoitlaste märkeruudu ükski linnuke, et inimene ei ole taimetoitlane, seega lisab see lahtrisse „Ei”. Kui aga märkeruudul Lõunasöök on kohustuslik, pole linnukest, siis me ei tea, kas inimene on taimetoitlane või mitte (see pole niikuinii oluline), nii et lahter jäetakse tühjaks ("").
Lõpuks viiakse valik tagasi töölehe algusesse, mis on valmis järgmiseks sissekandeks:
Vahemik ("A1"). Valige
Koodi 3 lisamine: vormiga manipuleerimine
Lõpuks näide selle kohta, kuidas vormi juhtelemente saab selle kasutamise ajal manipuleerida. Kui juhtimisomadused olid seatud, Lubatud märkeruutu Taimetoitlane omaduseks Vale. Kui juhtnupp pole lubatud, kasutaja ei saa sellesse väärtust sisestada, kuigi see võib sisaldada väärtust, mis oli juba olemas, ja VBA saab väärtust lisada, eemaldada või muuta.
Me ei pea teadma, kas inimene on taimetoitlane (isegi kui on!), Kui ta ei telli lõunat. Seega jääb märkeruut taimetoitlane keelatud, kui ruut Lõunasöögi nõutav märkeruut pole märgitud. Seejärel saab kasutaja soovi korral vabalt märkida taimetoitlaste märkeruudu. Kui nad selle linnukesega märgivad, teame, et nad on vastanud "jah" ja kui ei, siis teame, et nad vastasid "ei".
Võime lülitada Lubatud vara pärit Vale et Tõsi kasutades protseduuri, mis käivitub automaatselt iga kord, kui ruut Lõunasöögi nõutav väärtus muutub. Õnneks on rohkem juhtimisseadmeid a Muuda protseduur ja see, mida me siin kasutame chkLunch_Change (). Kasutame seda, et lubada märkeruut Taimetoitlane, kui on märgitud märkeruut Lõunasöök, ja keelata see, kui märkeruut Lõunasöök on märkimata.
Meil on vaja teha veel üks asi. Oletame, et keegi märkis märkeruudu Lõunasöök on nõutav ja märkis ka valiku Taimetoit. Siis nad mõtlesid ümber ja eemaldasid linnukese lõunast nõutud ruudust. Märkeruut Taimetoit oleks keelatud, kuid varem sisestatud linnuke jääks alles.
Täiendav koodirida võib veenduda, et linnuke on eemaldatud, kui kast on keelatud. Siin on kogu asi:
Privaatne alam chkLunch_Change () If chkLunch = True Siis chkVegetarian.Enabled = True Else chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Vormi avamine
Vorm on nüüd kasutamiseks valmis, seega tuleb see avada lihtsa makro abil. Selle saab lisada kohandatud tööriistariba nupule, töölehele joonistatud käsunupule või mis tahes graafikale (paremklõpsake graafikat ja valige Määrake makro). Vajadusel looge töövihiku jaoks uus moodul ja lisage see protseduur:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Kui teile meeldisid meie ajaveebid, jagage seda oma sõpradega Facebookis. Samuti saate meid jälgida Twitteris ja Facebookis.
Tahaksime sinust kuulda, andke meile teada, kuidas saaksime oma tööd täiustada, täiendada või uuendada ning muuta see teie jaoks paremaks. Kirjuta meile meilisaidile