The Formular de rezervare a cursului este o formă simplă care ilustrează principiile proiectării UserForm și codarea VBA asociată.
Folosește o selecție de controale, inclusiv casete de text, casete combinate, butoane de opțiune grupate într-un cadru, casete de selectare și butoane de comandă.
Când utilizatorul face clic pe butonul OK, intrarea lor este introdusă în următorul rând disponibil din foaia de lucru.
Descrierea formularului excel:
Există două casete de text simple (Nume: și Telefon:) în care utilizatorul poate introduce text liber și două casete combinate (Departament și Curs) care permit utilizatorului să aleagă un articol din listă.
Există trei butoane de opțiune (Introducere, Intermediar și Avansat) grupate într-un cadru (Nivel) astfel încât utilizatorul să poată alege doar una dintre opțiuni.
Există două casete de selectare (Prânz obligatoriu și Vegetarian) care, deoarece nu sunt grupate într-un cadru, pot fi alese ambele, dacă este necesar. Cu toate acestea, dacă persoana care face rezervarea nu dorește prânzul, nu trebuie să știm dacă este sau nu vegetariană. Asa ca Vegetarian caseta de selectare este gri până când este necesar.
Există trei butoane de comandă (Bine, Anulare și Formă clară) fiecare dintre care îndeplinește o funcție predefinită la clic.
Setările proprietăților de control:
Control | Tip | Proprietate | Setare |
UserForm | UserForm | Nume | frmCourseBooking |
Legendă | Formular de rezervare a cursului | ||
Nume | Casetă de text | Nume | txtName |
Telefon | Casetă de text | Nume | txtPhone |
Departament | Combo Box | Nume | cboDepartament |
Curs | Combo Box | Nume | cboCurs |
Nivel | Cadru | Nume | fraLevel |
Legendă | Nivel | ||
Introducere | Buton Opțiune | Nume | optIntroduction |
Intermediar | Buton Opțiune | Nume | optIntermediate |
Avansat | Buton Opțiune | Nume | optAdvanced |
Prânz obligatoriu | Caseta de bifat | Nume | chkLunch |
Vegetarian | Caseta de bifat | Nume | chkVegetarian |
Activat | Fals | ||
Bine | Butonul de comanda | Nume | cmdOk |
Legendă | Bine | ||
Mod implicit | Adevărat | ||
Anulare | Butonul de comanda | Nume | cmdAnulați |
Legendă | Anulare | ||
Anulare | Adevărat | ||
Formă clară | Butonul de comanda | Nume | cmdClearForm |
Crearea de formulare în Excel
Dacă doriți să creați singur formularul, pur și simplu copiați aspectul prezentat în ilustrația de mai sus. Urmați pașii de mai jos:
1. Deschideți registrul de lucru în care doriți să aparțină formularul (UserForms, cum ar fi macrocomenzile, trebuie atașate la un registru de lucru) și comutați la Editorul Visual Basic.
2. În Visual Basic Editor faceți clic pe Introduceți UserForm buton (sau accesați Insert> UserForm).
3. Dacă caseta de instrumente nu apare de la sine (faceți clic mai întâi pe formular pentru a vă asigura că nu se ascunde) faceți clic pe Trusa de scule buton (sau accesați Vizualizare> Casetă de instrumente).
4. Pentru a plasa un control pe formular, faceți clic pe butonul corespunzător din caseta de instrumente, apoi faceți clic pe formular. Comenzile pot fi mutate prin glisarea lor de margini sau redimensionate prin glisarea butoanelor în jurul perimetrului lor.
5. Pentru a edita proprietățile unui control, asigurați-vă că este selectat controlul ales, apoi efectuați modificările corespunzătoare în Proprietăți fereastră. Dacă nu puteți vedea fereastra de proprietăți, accesați Vizualizare> Fereastra Proprietăți.
6. Pentru a elimina un control din formular, selectați-l și faceți clic pe Șterge tasta de pe tastatură.
Un UserForm nu va face de fapt nimic până când nu este creat codul care conduce formularul și diversele sale controale. Următorul pas este să scrieți codul care conduce formularul în sine.
Adăugarea codului: 1 Inițializarea formularului
Inițializarea formularului:
Majoritatea formularelor au nevoie de un fel de configurare atunci când se deschid. Aceasta poate fi setarea valorilor implicite, asigurarea că câmpul este gol sau crearea listelor de casete combinate. Acest proces se numește Inițializarea formularului și este îngrijit de o macro numită UserForm_Initialize (în cazul în care sunteți confuz de ortografia mea diferită a cuvântului „initialis (z) e”, se datorează faptului că vorbesc engleză și VBA vorbește american - dar nu vă faceți griji, VBA va scrie-l pentru tine!). Iată cum să construiți codul pentru a inițializa formularul de rezervare a cursului:
1. Pentru a vizualiza fereastra de cod a formularului, accesați Vizualizare> Cod sau faceți clic F7.
2. Când se deschide prima fereastră de cod, aceasta conține un gol UserForm_Click () procedură. Utilizați listele derulante din partea de sus a ferestrei de cod pentru a alege UserForm și Inițializați. Aceasta va crea procedura de care aveți nevoie. Acum puteți șterge procedura UserForm_Click ().
3. Introduceți următorul cod în procedură:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" Cu 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 = Fals chkVegetarian = Fals txtName.SetFocus End Sub
Cum funcționează codul de inițializare:
Scopul procedurii UserForm_Initialize () este pregătirea formularului de utilizator în VBA pentru utilizare, setarea valorilor implicite pentru diferitele controale și crearea listelor pe care le vor afișa casetele combinate.
Aceste linii stabilesc conținutul celor două casete de text pentru a goli:
txtName.Value = "" txtPhone.Value = ""
Urmează instrucțiunile pentru casetele combinate. În primul rând este specificat conținutul listei, apoi valoarea inițială a casetei combinate este setată la gol.
Cu cboDepartment .AddItem "Vânzări" .AddItem "Marketing" (câte este necesar …) Terminați cu
cboDepartment.Value = ""
Dacă este necesar, se poate face o alegere inițială din grupul de opțiuni, în acest caz:
optIntroduction = Adevărat
Ambele casete de selectare sunt setate la False (adică fără bifă). Setați la True dacă doriți ca caseta de selectare să apară deja bifată:
chkLunch = False
chkVegetarian = False
În cele din urmă, focalizarea este dusă la prima casetă de text. Aceasta plasează cursorul utilizatorilor în caseta de text, astfel încât să nu fie nevoie să facă clic pe casetă înainte de a începe să tastați:
txtName.SetFocus
Adăugarea codului: 2 Făcând butoanele să funcționeze
Există trei butoane de comandă pe formular și fiecare trebuie să fie alimentat prin propria procedură. Începând cu cele simple …
Codificarea butonului Cancel:
Anterior, am folosit fereastra Properties pentru a seta Anulare proprietatea butonului Cancel la Adevărat. Când setați proprietatea Anulare a unui buton de comandă la Adevărat, acest lucru are ca efect „clic” pe butonul respectiv atunci când utilizatorul apasă butonul Esc tasta de pe tastatura lor. Dar numai asta nu va face să se întâmple nimic cu formularul. Trebuie să creați codul pentru evenimentul de clic al butonului care, în acest caz, va închide formularul. Iată cum:
1. Cu UserForm deschis pentru editare în Visual Basic Editor, faceți dublu clic pe butonul Cancel. Fereastra de cod a formularului se deschide cu cmdCancel_Click () procedura gata de editare.
2. Codul pentru închiderea unui formular este foarte simplu. Adăugați o linie de cod la procedură, astfel încât să arate astfel:
Private Sub cmdCancel_Click () Unload Me End Sub
Codificarea butonului Șterge formularul:
Am adăugat un buton pentru a șterge formularul în cazul în care utilizatorul dorea să se răzgândească și să reseteze totul și pentru a ușura dacă avea mai multe rezervări de făcut simultan. Tot ce trebuie să facă este să rulați din nou procedura de inițializare. Unui macro i se poate spune să ruleze un alt macro (sau o serie de macrocomenzi, dacă este necesar) folosind Apel cuvânt cheie:
1. Faceți dublu clic pe butonul Ștergeți formularul. Fereastra de cod a formularului se deschide cu cmdClearForm_Click () procedura gata de editare.
2. Adăugați o linie de cod la procedură, astfel încât să arate astfel:
Private Sub cmdClearForm_Click () Apelați UserForm_Initialize End Sub
Codificarea butonului OK:
Acesta este fragmentul de cod care trebuie să facă treaba de a transfera opțiunile utilizatorului și introducerea textului pe foaia de lucru. Când setăm proprietatea Cancel a butonului Cancel la True, setăm și butonul OK Mod implicit proprietate pentru Adevărat. Aceasta trebuie să faceți clic pe butonul OK atunci când utilizatorul apasă pe introduce (sau Întoarcere) de pe tastatura lor (cu condiția să nu le fi folosit Tab tasta pentru a fila un alt buton). Iată codul pentru ca butonul să funcționeze:
1. Faceți dublu clic pe butonul OK. Fereastra de cod a formularului se deschide cu cmdOK_Click () procedura gata de editare.
2. Editați procedura pentru a adăuga următorul cod:
Private Sub cmdOK_Click () ActiveWorkbook.Sheets ("Rezervări curs"). Activați intervalul ("A1"). Selectați Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0). Selectați End If Loop Until 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 = True Then ActiveCell.Offset (0, 4) .Value = "Introducere" ElseIf optIntermediate = Adevărat Atunci ActiveCell.Offset (0, 4) .Value = "Intermed" Altfel ActiveCell.Offset (0, 4) .Value = "Adv" End If If chkLunch = True Then ActiveCell.Offset (0, 5) .Value = "Da" Altfel ActiveCell.Offset (0, 5) .Value = "Nu" End If If chkVegetarian = True Then ActiveCell.Offset (0, 6). Valoare = "Da" Altfel Dacă chkLunch = False Apoi ActiveCell.Offset (0, 6) .Value = "" Altfel ActiveCell.Offset (0, 6) .Value = "Nu" Sfârșit Dacă Sfârșit Dacă Interval ("A1"). Selectați End Sub
Cum funcționează codul CmdOK_Click:
Primele două linii se asigură că registrul de lucru corect este activ și mută selecția în celula A1:
ActiveWorkbook.Sheets ("Rezervări curs"). Activați intervalul ("A1"). Selectați Următoarele linii mută selecția în jos foaia de lucru până când găsește o celulă goală: Do If IsEmpty (ActiveCell) = False Then ActiveCell.Offset (1 , 0). Selectați End If Loop Until IsEmpty (ActiveCell) = True
Următoarele patru linii încep să scrie conținutul formularului pe foaia de lucru, folosind celula activă (care se află în coloana A) ca referință și se deplasează de-a lungul rândului o celulă la un moment dat:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Acum ajungem la butoanele de opțiune. Acestea au fost plasate într-un cadru al formularului, astfel încât utilizatorul să poată alege doar unul. O instrucțiune IF este utilizată pentru a instrui Excel ce să facă pentru fiecare opțiune:
If optIntroduction = True Then ActiveCell.Offset (0, 4) .Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset (0, 4) .Value = "Intermed" Else ActiveCell.Offset (0, 4) .Value = „Adv” End If
Instrucțiunile IF VBA sunt mult mai ușor de gestionat decât funcția IF Excel. Puteți avea câte opțiuni doriți, trebuie doar să introduceți o opțiune suplimentară AltfelDacă pentru fiecare. Dacă ar exista doar două opțiuni, nu ai avea nevoie de AltfelDacă, doar Dacă și Altfel ar fi suficient (nu uitați - toți au nevoie de un End If).
Există o altă instrucțiune IF pentru fiecare casetă de selectare. Pentru caseta de selectare Prânz obligatoriu, o bifă în casetă înseamnă „Da”, persoana necesită prânz, iar nicio bifă nu înseamnă „Nu”.
Dacă chkLunch = True, atunci ActiveCell.Offset (0, 5) .Value = "Da" Altfel ActiveCell.Offset (0, 5) .Value = "Nu" Termină Dacă
Am putea folosi o declarație similară IF pentru caseta de selectare Vegetarian, dar dacă persoana nu necesită prânz, este irelevant dacă este sau nu vegetarian. În orice caz, ar fi greșit să presupunem că nu erau vegetarieni pur și simplu pentru că nu aveau nevoie de prânz. Declarația IF conține, prin urmare, o a doua declarație imbricată if:
If chkVegetarian = True Then ActiveCell.Offset (0, 6) .Value = "Da" Altele If chkLunch = False Then ActiveCell.Offset (0, 6) .Value = "" Altele ActiveCell.Offset (0, 6) .Value = „Nu” Termină dacă Termină Dacă
O bifă în casetă înseamnă „Da” persoana este vegetariană. Dacă nu este bifată în casetă, instrucțiunea IF imbricată se uită la caseta de selectare Prânz obligatoriu. Dacă caseta de selectare Prânz obligatoriu are o bifă, atunci nicio bifă în caseta de selectare Vegetariană înseamnă că persoana nu este vegetariană, așa că introduce „Nu” în celulă. Cu toate acestea, dacă caseta de selectare Prânz obligatoriu nu are o bifă, atunci nu știm dacă persoana este sau nu vegetariană (oricum nu contează), astfel încât celula este lăsată necompletată ("" ").
În cele din urmă, selecția este readusă la începutul foii de lucru, gata pentru următoarea intrare:
Range ("A1"). Selectați
Adăugarea codului 3: manipularea formularului
În cele din urmă, un exemplu despre modul în care comenzile dintr-un formular pot fi manipulate în timp ce acesta este utilizat. Când au fost setate proprietățile de control, Activat proprietatea casetei de selectare Vegetarian a fost setată la Fals. Când un control nu este activat utilizator nu poate introduce o valoare în ea, deși poate deține o valoare care exista deja, iar VBA poate adăuga, elimina sau modifica valoarea.
Nu trebuie să știm dacă persoana este sau nu vegetariană (chiar dacă este!) Dacă nu comandă prânzul. Deci, caseta de selectare Vegetariană rămâne dezactivată, cu excepția cazului în care este bifată o casetă de selectare în caseta de selectare Prânz obligatoriu. Apoi utilizatorul este liber să bifeze caseta de selectare Vegetarian dacă dorește. Dacă o bifează, vom ști că au răspuns „Da” și dacă nu, știm că au răspuns „Nu”.
Putem comuta Activat proprietate din Fals la Adevărat având o procedură care rulează automat ori de câte ori se modifică valoarea casetei de selectare Prânz obligatoriu. Din fericire, mai multe controale au un Schimbare procedura și cea pe care o folosim aici este chkLunch_Change (). Vom folosi acest lucru pentru a activa caseta de selectare Vegetariană atunci când este bifată caseta de selectare Prânz obligatoriu și o vom dezactiva atunci când caseta de selectare Prânz obligatoriu nu este bifată.
Mai trebuie doar un lucru. Să presupunem că cineva a bifat caseta de selectare Prânz obligatoriu și a bifat și caseta de selectare Vegetarian. Apoi s-au răzgândit și au scos bifă din caseta de selectare Prânz obligatoriu. Caseta de selectare Vegetariană ar fi dezactivată, dar bifa care a fost introdusă mai devreme va rămâne.
O linie suplimentară de cod vă poate asigura că bifarea este eliminată atunci când caseta este dezactivată. Iată totul:
Private Sub chkLunch_Change () Dacă chkLunch = Adevărat Atunci chkVegetarian.Enabled = Adevărat Altele chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Deschiderea formularului
Formularul este acum gata de utilizare, deci trebuie să fie deschis cu o macro simplă. Acesta poate fi atașat la un buton personalizat al barei de instrumente, la un buton de comandă desenat pe foaia de lucru sau la orice grafic (faceți clic dreapta pe grafic și alegeți Atribuiți macro). Dacă este necesar, creați un nou modul pentru registrul de lucru și adăugați această procedură:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Dacă ți-au plăcut blogurile noastre, împărtășește-le prietenilor tăi de pe Facebook. Și, de asemenea, ne puteți urmări pe Twitter și Facebook.
Ne-ar plăcea să aflăm de la dvs., să ne anunțați cum putem îmbunătăți, completa sau inova munca noastră și să o îmbunătățim. Scrieți-ne pe site-ul de e-mail