Det Kursusbestillingsformular er en enkel form, der illustrerer principperne for UserForm -design og den tilhørende VBA -kodning.
Det bruger et udvalg af kontroller, herunder tekstbokse, kombinationsbokse, valgknapper grupperet i en ramme, afkrydsningsfelter og kommandoknapper.
Når brugeren klikker på knappen OK, indtastes deres input i den næste tilgængelige række på regnearket.
Beskrivelse af excel -form:
Der er to enkle tekstfelter (Navn: og Telefon:), hvor brugeren kan skrive fritekst, og to kombinationsbokse (Afdeling og Rute), der lader brugeren vælge et element fra listen.
Der er tre valgknapper (Introduktion, Mellemliggende og Fremskreden) grupperet i en ramme (Niveau), så brugeren kun kan vælge en af mulighederne.
Der er to afkrydsningsfelter (Frokost påkrævet og Vegetar), at fordi de ikke er grupperet i en ramme, kan begge vælges, hvis det kræves. Men hvis den person, der foretager reservationen, ikke ønsker frokost, behøver vi ikke at vide, om de er vegetariske eller ej. Så Vegetar afkrydsningsfeltet er nedtonet, indtil det kræves.
Der er tre kommandoknapper (Okay, Afbestille og Klar form) som hver udfører en foruddefineret funktion, når der klikkes på dem.
Indstillingerne for kontrolegenskaber:
Styring | Type | Ejendom | Indstilling |
UserForm | UserForm | Navn | frmCourseBooking |
Billedtekst | Kursusbestillingsformular | ||
Navn | Tekstboks | Navn | txtName |
telefon | Tekstboks | Navn | txtPhone |
Afdeling | Kombinationsfelt | Navn | cboDepartment |
Rute | Kombinationsfelt | Navn | cboCourse |
Niveau | Ramme | Navn | fraNiveau |
Billedtekst | Niveau | ||
Introduktion | Valgknap | Navn | optIntroduktion |
Mellemliggende | Valgknap | Navn | optIntermediate |
Fremskreden | Valgknap | Navn | optAdvanced |
Frokost påkrævet | Afkrydsningsfelt | Navn | chkLunch |
Vegetar | Afkrydsningsfelt | Navn | chkVegetarisk |
Aktiveret | Falsk | ||
Okay | Kommandoknap | Navn | cmdOk |
Billedtekst | Okay | ||
Standard | Sand | ||
Afbestille | Kommandoknap | Navn | cmdAnnullering |
Billedtekst | Afbestille | ||
Afbestille | Sand | ||
Klar form | Kommandoknap | Navn | cmdClearForm |
Oprettelse af formularer i Excel
Hvis du selv vil bygge formularen, skal du blot kopiere det layout, der er vist i illustrationen ovenfor. Følg nedenstående trin:
1. Åbn den projektmappe, du vil have formularen til at tilhøre (UserForms som makroer skal vedhæftes en projektmappe), og skift til Visual Basic Editor.
2. I Visual Basic Editor klikkes på Indsæt UserForm knappen (eller gå til Indsæt> UserForm).
3. Hvis værktøjskassen ikke vises af sig selv (klik først på formularen for at sikre, at den ikke gemmer sig), klik på Værktøjskasse knappen (eller gå til Vis> Værktøjskasse).
4. For at placere en kontrol på formularen skal du klikke på den relevante knap i værktøjskassen og derefter klikke på formularen. Kontroller kan flyttes ved at trække dem ved deres kanter eller ændre størrelsen ved at trække knapperne rundt om deres omkreds.
5. For at redigere egenskaberne for en kontrol skal du kontrollere, at den valgte kontrol er valgt, og derefter foretage de relevante ændringer i Ejendomme vindue. Hvis du ikke kan se egenskabsvinduet, skal du gå til Vis> Egenskaber -vindue.
6. Hvis du vil fjerne en kontrol fra formularen, skal du markere den og klikke på Slet tast på dit tastatur.
En UserForm vil faktisk ikke gøre noget, før koden, der driver formularen og dens forskellige kontrolelementer, er oprettet. Det næste trin er at skrive koden, der driver selve formularen.
Tilføjelse af koden: 1 Initialiserer formularen
Initialisering af formularen:
De fleste formularer har brug for en eller anden form for opsætning, når de åbnes. Dette kan være at indstille standardværdier, sørge for at feltet er tomt eller opbygge listerne over kombinationsbokse. Denne proces kaldes Initialiserer formularen og det bliver taget hånd om af en makro kaldet UserForm_Initialize (hvis du er forvirret over min varierende stavning af ordet "initialis (z) e", er det fordi jeg taler engelsk og VBA taler amerikansk - men bare rolig, VBA vil stave det for dig!). Sådan bygger du koden til at initialisere kursusbestillingsformularen:
1. For at se formularens kodevindue skal du gå til Vis> Kode eller klik F7.
2. Når kodevinduet først åbnes, indeholder det et tomt UserForm_Click () procedure. Brug rullelisterne øverst i kodevinduet til at vælge UserForm og Initialiser. Dette vil skabe den procedure, du har brug for. Du kan nu slette UserForm_Click () -proceduren.
3. Indtast følgende kode i proceduren:
Private Sub UserForm_Initialize () txtName.Value = "" txtPhone.Value = "" With cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem "Dispatch". AddItem "Transport" slut med cboDepartment.Value = "" Med cboCourse .AddItem "Adgang" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" End With cboCourse.Value = "" optIntroduction = True chkLunch = Falsk chkVegetarian = Falsk txtName.SetFocus End Sub
Sådan fungerer initialiseringskoden:
Formålet med proceduren UserForm_Initialize () er at forberede brugerformularen i VBA til brug, indstille standardværdierne for de forskellige kontroller og oprette de lister, som kombinationsboksene vil vise.
Disse linjer sætter indholdet i de to tekstbokse til at være tomt:
txtName.Value = "" txtPhone.Value = ""
Dernæst kommer instruktionerne til kombinationsbokse. Først og fremmest er indholdet på listen angivet, derefter er den indledende værdi af kombinationsboksen indstillet til tom.
Med cboDepartment .AddItem "Salg" .AddItem "Marketing" (så mange som nødvendige …) Slut med
cboDepartment.Value = ""
Om nødvendigt kan der foretages et indledende valg fra valggruppen, i dette tilfælde:
optIntroduction = True
Begge afkrydsningsfelter er sat til Falsk (dvs. ingen markering). Indstil til True, hvis du vil have markeret afkrydsningsfeltet allerede:
chkLunch = Falsk
chkVegetarian = Falsk
Endelig fokuseres der på det første tekstfelt. Dette placerer brugernes markør i tekstfeltet, så de ikke behøver at klikke på feltet, før de begynder at skrive:
txtName.SetFocus
Tilføjelse af koden: 2 Få knapperne til at fungere
Der er tre kommandoknapper på formularen, og hver skal drives af sin egen procedure. Startende med de enkle …
Kodning af knappen Annuller:
Tidligere brugte vi vinduet Egenskaber til at indstille Afbestille egenskab ved knappen Annuller til Sand. Når du indstiller egenskaben Annuller for en kommandoknap til Sand, har dette den virkning, at "klikke" på den knap, når brugeren trykker på Esc tast på deres tastatur. Men dette alene vil ikke få noget til at ske med formen. Du skal oprette koden til klikhændelsen på knappen, der i dette tilfælde vil lukke formularen. Sådan gør du:
1. Mens UserForm er åben til redigering i Visual Basic Editor, skal du dobbeltklikke på knappen Annuller. Formularens kodevindue åbnes med cmdCancel_Click () procedure klar til redigering.
2. Koden til lukning af en formular er meget enkel. Tilføj en kodelinje til proceduren, så den ser sådan ud:
Privat sub cmdCancel_Click () Unload Me End Sub
Kodning af knappen Clear Form:
Jeg tilføjede en knap til at rydde formularen, hvis brugeren ville ændre mening og nulstille alt, og for at gøre det lettere, hvis de havde flere bookinger at foretage ad gangen. Alt det skal gøre er at køre initialiseringsproceduren igen. En makro kan få besked på at køre en anden makro (eller en række makroer, hvis det er nødvendigt) ved hjælp af Opkald søgeord:
1. Dobbeltklik på knappen Ryd formular. Formularens kodevindue åbnes med cmdClearForm_Click () procedure klar til redigering.
2. Tilføj en kodelinje til proceduren, så den ser sådan ud:
Privat under cmdClearForm_Click () Ring til UserForm_Initialize Slut sub
Kodning af OK -knappen:
Dette er det stykke kode, der skal gøre jobbet med at overføre brugerens valg og tekstindtastning til regnearket. Når vi indstiller annulleringsknappens annulleringsegenskab til sand, indstiller vi også knappen OK Standard ejendom til Sand. Dette er ved at klikke på knappen OK, når brugeren trykker på Gå ind (eller Vend tilbage) -tasten på deres tastatur (forudsat at de ikke har brugt deres Tab nøgle til fane til en anden knap). Her er koden for at få knappen til at fungere:
1. Dobbeltklik på knappen OK. Formularens kodevindue åbnes med cmdOK_Click () procedure klar til redigering.
2. Rediger proceduren for at tilføje følgende kode:
Privat under cmdOK_Click () ActiveWorkbook.Sheets ("Kursusbookinger"). Aktiver område ("A1"). Vælg Do If IsEmpty (ActiveCell) = FalseThen ActiveCell.Offset (1, 0) .Vælg Afslut hvis loop til 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 Hvis 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 Hvis chkLunch = True Så ActiveCell.Offset (0, 5) .Value = "Ja" Ellers ActiveCell.Offset (0, 5) .Value = "No" End If If chkVegetarian = True Then 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"). Vælg Afslut sub
Sådan fungerer CmdOK_Click -koden:
De to første linjer sikrer, at den korrekte projektmappe er aktiv og flytter markeringen til celle A1:
ActiveWorkbook.Sheets ("Course Bookings"). Aktiver område ("A1"). Vælg De næste par linjer flytter markeringen ned i regnearket, indtil det finder en tom celle: Do If IsEmpty (ActiveCell) = False Then ActiveCell.Offset (1 , 0) .Vælg Afslut hvis loop til IsEmpty (ActiveCell) = True
De næste fire linjer begynder at skrive indholdet af formularen på regnearket ved hjælp af den aktive celle (som er i kolonne A) som reference og flytte langs rækken en celle ad gangen:
ActiveCell.Value = txtName.Value ActiveCell.Offset (0, 1) = txtPhone.Value ActiveCell.Offset (0, 2) = cboDepartment.Value ActiveCell.Offset (0, 3) = cboCourse.Value
Nu kommer vi til valgknapperne. Disse er placeret i en ramme på formularen, så brugeren kun kan vælge en. En IF -erklæring bruges til at instruere Excel, hvad de skal gøre for hver mulighed:
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" Afslut hvis
VBA IF -sætninger er meget lettere at administrere end Excel's IF -funktion. Du kan have så mange muligheder som du vil, bare indsæt en ekstra Ellers hvis for hver enkelt. Hvis der kun var to muligheder, havde du ikke brug for det Ellers hvis, bare Hvis og Andet ville være tilstrækkeligt (glem ikke - de har alle brug for en Afslut Hvis).
Der er en anden IF -erklæring for hvert afkrydsningsfelt. I afkrydsningsfeltet Frokost påkrævet betyder et flueben i feltet "Ja", personen kræver frokost, og ingen markering betyder "Nej", de gør ikke.
Hvis chkLunch = True Så ActiveCell.Offset (0, 5) .Value = "Ja" Ellers ActiveCell.Offset (0, 5) .Value = "Nej" Slut hvis
Vi kunne bruge en lignende IF -erklæring til afkrydsningsfeltet Vegetar, men hvis personen ikke har brug for frokost, er det uden betydning, om de er vegetariske eller ej. I hvert fald ville det være forkert at antage, at de ikke var vegetarer, simpelthen fordi de ikke krævede frokost. IF -sætningen indeholder derfor en anden, indlejret if -sætning:
Hvis chkVegetarian = True derefter ActiveCell.Offset (0, 6) .Value = "Ja" Ellers Hvis chkLunch = False, så ActiveCell.Offset (0, 6) .Value = "" Else ActiveCell.Offset (0, 6) .Value = "Nej" slut hvis slut hvis
Et kryds i feltet betyder "Ja" personen er vegetar. Hvis der ikke er et flueben i feltet, ser den indlejrede IF -sætning i afkrydsningsfeltet Frokost påkrævet. Hvis afkrydsningsfeltet Frokost påkrævet har et flueben i det, betyder ingen markering i afkrydsningsfeltet Vegetar, at personen ikke er vegetar, så det indsætter "Nej" i cellen. Men hvis afkrydsningsfeltet Frokost påkrævet ikke har et flueben i det, ved vi ikke, om personen er vegetar eller ej (det gør alligevel ikke noget), så cellen efterlades tom ("").
Endelig tages valget tilbage til begyndelsen af regnearket, klar til næste post:
Område ("A1"). Vælg
Tilføjelse af kode 3: Manipulering af formularen
Endelig et eksempel på, hvordan kontrollerne på en formular kan manipuleres, mens den er i brug. Når kontrolegenskaberne blev angivet, blev Aktiveret ejendom i afkrydsningsfeltet Vegetar blev sat til Falsk. Når en kontrol ikke er aktiveret bruger kan ikke indtaste en værdi i den, selvom den kan indeholde en værdi, der allerede var der, og VBA kan tilføje, fjerne eller ændre værdien.
Vi behøver ikke at vide, om personen er vegetar eller ej (selvom de er det!), Hvis de ikke bestiller frokost. Så afkrydsningsfeltet Vegetar forbliver deaktiveret, medmindre der er sat et flueben i afkrydsningsfeltet Frokost påkrævet. Derefter kan brugeren markere afkrydsningsfeltet Vegetar, hvis han vil. Hvis de markerer det, ved vi, at de har svaret "Ja", og hvis de ikke ved det, har de svaret "Nej".
Vi kan skifte Aktiveret ejendom fra Falsk til Sand ved at have en procedure, der kører automatisk, når værdien af afkrydsningsfeltet Frokost påkrævet ændres. Heldigvis har flere kontroller en Lave om procedure, og den vi bruger her er chkLunch_Change (). Vi bruger dette til at aktivere afkrydsningsfeltet Vegetar, når afkrydsningsfeltet Frokost påkrævet er markeret, og deaktiverer det, når afkrydsningsfeltet Frokost påkrævet ikke er markeret.
Der er bare en ting mere, vi skal gøre. Antag at nogen markerede afkrydsningsfeltet Frokost påkrævet og også markerede afkrydsningsfeltet Vegetar. Derefter ændrede de mening og fjernede fluebenet fra afkrydsningsfeltet Frokost påkrævet. Afkrydsningsfeltet Vegetar ville blive deaktiveret, men det flueben, der blev sat tidligere, forbliver.
En ekstra kodelinje kan sikre, at fluebenet fjernes, når feltet er deaktiveret. Her er det hele:
Privat sub chkLunch_Change () Hvis chkLunch = True Så chkVegetarian.Enabled = True Else chkVegetarian.Enabled = Falsk chkVegetarian = Falsk End If End Sub
Åbning af formularen
Formularen er nu klar til brug, så den skal åbnes med en simpel makro. Det kan vedhæftes en brugerdefineret værktøjslinjeknap, en kommandoknap tegnet på regnearket eller en hvilken som helst grafik (højreklik på grafikken og vælg Tildel makro). Hvis det er nødvendigt, skal du oprette et nyt modul til projektmappen og tilføje denne procedure:
Sub OpenCourseBookingForm () frmCourseBooking.Show End Sub
Hvis du kunne lide vores blogs, kan du dele den med dine venner på Facebook. Og også du kan følge os på Twitter og Facebook.
Vi vil meget gerne høre fra dig, lad os vide, hvordan vi kan forbedre, supplere eller innovere vores arbejde og gøre det bedre for dig. Skriv til os på e -mail -stedet