Een formulier maken in Microsoft Excel

Inhoudsopgave:

Anonim

De Cursus boekingsformulier is een eenvoudig formulier dat de principes van UserForm-ontwerp en de bijbehorende VBA-codering illustreert.

Het maakt gebruik van een selectie van bedieningselementen, waaronder tekstvakken, keuzelijsten, keuzerondjes gegroepeerd in een frame, selectievakjes en opdrachtknoppen.

Wanneer de gebruiker op de knop OK klikt, wordt zijn invoer ingevoerd in de volgende beschikbare rij op het werkblad.

Beschrijving van Excel-formulier:

Er zijn twee eenvoudige tekstvakken (Naam: en Telefoon:) waarin de gebruiker vrije tekst kan typen, en twee keuzelijsten (afdeling en Cursus) waarmee de gebruiker een item uit de lijst kan kiezen.

Er zijn drie keuzerondjes (Invoering, Tussenliggend en Geavanceerd) gegroepeerd in een frame (Peil) zodat de gebruiker slechts één van de opties kan kiezen.

Er zijn twee selectievakjes (Lunch vereist en Vegetarisch) die, omdat ze niet in een frame zijn gegroepeerd, desgewenst beide kunnen worden gekozen. Als de persoon die boekt echter geen lunch wil, hoeven we niet te weten of hij of zij vegetarisch is. Dus de Vegetarisch selectievakje is grijs totdat het nodig is.

Er zijn drie opdrachtknoppen (Oke, Annuleren en Formulier wissen) die elk een vooraf gedefinieerde functie uitvoeren wanneer erop wordt geklikt.

De instellingen voor besturingseigenschappen:

Controle Type Eigendom Instelling
Gebruikersformulier Gebruikersformulier Naam frmCursusReserveren
Onderschrift Cursus boekingsformulier
Naam Tekstveld Naam txtNaam
Telefoon Tekstveld Naam txtTelefoon
afdeling Combobox Naam cboAfdeling
Cursus Combobox Naam cboCursus
Peil Kader Naam fraLevel
Onderschrift Peil
Invoering Optieknop Naam optIntroductie
Tussenliggend Optieknop Naam optIntermediate
Geavanceerd Optieknop Naam optAdvanced
Lunch vereist Selectievakje Naam chkLunch
Vegetarisch Selectievakje Naam chkVegetarisch
Ingeschakeld niet waar
Oke Command knop Naam cmdOk
Onderschrift Oke
Standaard Waar
Annuleren Command knop Naam cmdAnnuleren
Onderschrift Annuleren
Annuleren Waar
Formulier wissen Command knop Naam cmdClearForm

Formulieren maken in Excel

Als u het formulier zelf wilt bouwen, kopieert u gewoon de lay-out die in de bovenstaande afbeelding wordt getoond. Volg onderstaande stappen:

1. Open de werkmap waarin u het formulier wilt laten horen (UserForms zoals macro's moeten aan een werkmap worden gekoppeld) en schakel over naar de Visual Basic Editor.

2. Klik in de Visual Basic Editor op de Gebruikersformulier invoegen knop (of ga naar Invoegen > Gebruikersformulier).

3. Als de toolbox niet vanzelf verschijnt (klik eerst op het formulier om er zeker van te zijn dat het niet verbergt), klik dan op de Gereedschapskist knop (of ga naar Bekijk > Gereedschapskist).

4. Om een ​​besturingselement op het formulier te plaatsen, klikt u op de juiste knop in de gereedschapskist en klikt u vervolgens op het formulier. Besturingselementen kunnen worden verplaatst door ze aan hun randen te slepen, of de grootte ervan wijzigen door de knoppen rond hun omtrek te slepen.

5. Om de eigenschappen van een besturingselement te bewerken, zorgt u ervoor dat het gekozen besturingselement is geselecteerd en brengt u de juiste wijzigingen aan in de Eigendommen raam. Als u het eigenschappenvenster niet kunt zien, gaat u naar Weergave > Venster Eigenschappen.

6. Om een ​​besturingselement uit het formulier te verwijderen, selecteert u het en klikt u op de Verwijderen toets op uw toetsenbord.

Een UserForm doet eigenlijk niets totdat de code die het formulier en de verschillende besturingselementen ervan aanstuurt, is gemaakt. De volgende stap is het schrijven van de code die het formulier zelf aanstuurt.

De code toevoegen: 1 Het formulier initialiseren

Het formulier initialiseren:

De meeste formulieren moeten op de een of andere manier worden ingesteld wanneer ze worden geopend. Dit kan het instellen van standaardwaarden zijn, ervoor zorgen dat het veld leeg is, of het samenstellen van lijsten met keuzelijsten. Dit proces heet Het formulier initialiseren en het wordt verzorgd door een macro genaamd UserForm_Initialize (voor het geval je in de war bent door mijn wisselende spelling van het woord "initialis(z)e", dat is omdat ik Engels spreek en VBA Amerikaans spreekt - maar maak je geen zorgen, VBA zal schrijf het voor je!). Ga als volgt te werk om de code te maken om het cursusboekingsformulier te initialiseren:
1. Om het codevenster van het formulier te bekijken, gaat u naar Bekijk > Code of klik op F7.

2. Wanneer het codevenster voor het eerst wordt geopend, bevat het een lege UserForm_Click() procedure. Gebruik de vervolgkeuzelijsten bovenaan het codevenster om te kiezen Gebruikersformulier en Initialiseren. Hiermee creëer je de procedure die je nodig hebt. U kunt nu de procedure UserForm_Click() verwijderen.

3. Voer de volgende code in de procedure in:

Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" Met cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Advertising" .AddItem AddItem "Transportation" Eindigt met cboDepartment.Value = "" Met cboCourse .AddItem "Access" .AddItem "Excel" .AddItem "PowerPoint" .AddItem "Word" .AddItem "FrontPage" Eindigt met cboCourse.Value = "True optIntroduction =" chkLunch = False chkVegetarian = False txtName.SetFocus End Sub 

Hoe de initialisatiecode werkt:

Het doel van de procedure UserForm_Initialize() is om het gebruikersformulier in VBA voor gebruik voor te bereiden, de standaardwaarden voor de verschillende bedieningselementen in te stellen en de lijsten te maken die de keuzelijsten met invoervak ​​zullen tonen.

Deze regels stellen de inhoud van de twee tekstvakken leeg:

txtName.Value = "" txtPhone.Value = "" 

Vervolgens komen de instructies voor de comboboxen. Allereerst wordt de inhoud van de lijst gespecificeerd, daarna wordt de beginwaarde van de combobox op leeg gezet.

Met cboDepartment .AddItem "Sales" .AddItem "Marketing" (zoveel als nodig…) Eindigen met 

cboDepartment.Value = ""

Desgewenst kan uit de optiegroep een eerste keuze worden gemaakt, in dit geval:

optIntroductie = True

Beide selectievakjes zijn ingesteld op False (d.w.z. geen vinkje). Stel in op True als u wilt dat het selectievakje al is aangevinkt:

chkLunch = False

chkVegetarisch = False

Ten slotte wordt de focus naar het eerste tekstvak gebracht. Hierdoor wordt de cursor van de gebruiker in het tekstvak geplaatst, zodat ze niet op het vak hoeven te klikken voordat ze beginnen te typen:

txtName.SetFocus

De code toevoegen: 2 De knoppen laten werken

Er zijn drie opdrachtknoppen op het formulier en elk moet worden aangedreven door zijn eigen procedure. Beginnend met de simpele…

De annuleerknop coderen:

Eerder gebruikten we het eigenschappenvenster om de Annuleren eigenschap van de knop Annuleren om Waar. Wanneer u de eigenschap Annuleren van een opdrachtknop instelt op True, heeft dit het effect dat op die knop wordt "geklikt" wanneer de gebruiker op de Esc toets op hun toetsenbord. Maar dit alleen zal er niet voor zorgen dat er iets met het formulier gebeurt. U moet de code maken voor de klikgebeurtenis van de knop die in dit geval het formulier sluit. Hier is hoe:

1. Open het gebruikersformulier om te bewerken in de Visual Basic Editor en dubbelklik op de knop Annuleren. Het codevenster van het formulier wordt geopend met de cmdCancel_Click() procedure klaar voor bewerking.

2. De code voor het sluiten van een formulier is heel eenvoudig. Voeg een regel code toe aan de procedure, zodat deze er als volgt uitziet:

Private Sub cmdCancel_Click() Unload Me End Sub 

De knop Formulier wissen coderen:

Ik heb een knop toegevoegd om het formulier te wissen voor het geval de gebruiker van gedachten wil veranderen en alles opnieuw wil instellen, en om het gemakkelijker te maken als ze meerdere boekingen tegelijk moeten maken. Het enige wat u hoeft te doen, is de initialisatieprocedure opnieuw uit te voeren. Een macro kan worden verteld om een ​​andere macro uit te voeren (of een reeks macro's indien nodig) met behulp van de Telefoongesprek trefwoord:

1. Dubbelklik op de knop Formulier wissen. Het codevenster van het formulier wordt geopend met de cmdClearForm_Click() procedure klaar voor bewerking.

2. Voeg een regel code toe aan de procedure, zodat deze er als volgt uitziet:

Private Sub cmdClearForm_Click() Call UserForm_Initialize End Sub 

De OK-knop coderen:

Dit is het stukje code dat het werk moet doen om de keuzes en tekstinvoer van de gebruiker naar het werkblad over te brengen. Wanneer we de Annuleren-eigenschap van de knop Annuleren op True zetten, stellen we ook de knop OK in Standaard eigendom aan Waar. Dit bestaat uit het klikken op de OK-knop wanneer de gebruiker op de drukt Binnenkomen (of Opbrengst) toets op hun toetsenbord (op voorwaarde dat ze hun Tab toets om naar een andere knop te gaan). Hier is de code om de knop te laten werken:

1. Dubbelklik op de knop OK. Het codevenster van het formulier wordt geopend met de cmdOK_Click() procedure klaar voor bewerking.

2. Bewerk de procedure om de volgende code toe te voegen:

Private Sub cmdOK_Click() ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select Do If IsEmpty(ActiveCell) = FalseThen ActiveCell.Offset(1, 0).Select 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 Dan 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 If chkLunch = True Dan ActiveCell.Offset(0, 5).Value = "Ja" Else ActiveCell.Offset(0, 5).Value = "Nee" End If If chkVegetarian = True Dan ActiveCell.Offset(0, 6). Waarde = "Ja" Else If chkLunch = False Dan ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Waarde = "Nee" End If End If Range ("A1"). Selecteer Einde Sub 

Hoe de CmdOK_Click-code werkt:

De eerste twee regels zorgen ervoor dat de juiste werkmap actief is en verplaatsen de selectie naar cel A1:

ActiveWorkbook.Sheets("Course Bookings").Activate Range("A1").Select De volgende paar regels verplaatsen de selectie naar beneden in het werkblad totdat een lege cel wordt gevonden: Do If IsEmpty(ActiveCell) = False Then ActiveCell.Offset(1 , 0). Selecteer End If Loop Until IsEmpty(ActiveCell) = True 

De volgende vier regels beginnen de inhoud van het formulier op het werkblad te schrijven, waarbij de actieve cel (in kolom A) als referentie wordt gebruikt en langs de rij een cel tegelijk:

ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value 

Nu komen we bij de optieknoppen. Deze zijn in een kader op het formulier geplaatst, zodat de gebruiker er maar één kan kiezen. Een IF-statement wordt gebruikt om Excel te instrueren wat voor elke optie moet:

If optIntroduction = True Dan ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Dan ActiveCell.Offset(0, 4).Value = "Intermed" Else ActiveCell.Offset (0, 4).Value = "Adv" Einde Als 

VBA IF-instructies zijn veel gemakkelijker te beheren dan de IF-functie van Excel. U kunt zoveel opties hebben als u wilt, voeg gewoon een extra in ElseIf voor elke. Als er maar twee opties waren, zou je de niet nodig hebben ElseIf, alleen de Indien en Anders zou voldoende zijn (vergeet niet - ze hebben allemaal een Stop als).

Er is een ander IF-statement voor elk selectievakje. Voor het selectievakje Lunch vereist betekent een vinkje in het vakje "Ja", de persoon heeft lunch nodig, en geen vinkje betekent "Nee", dat doen ze niet.

If chkLunch = True Dan ActiveCell.Offset(0, 5).Value = "Ja" Else ActiveCell.Offset(0, 5).Value = "Nee" End If 

We zouden een soortgelijke IF-verklaring kunnen gebruiken voor het selectievakje Vegetarisch, maar als de persoon geen lunch nodig heeft, is het niet relevant of hij of zij vegetariër is. Het zou in ieder geval verkeerd zijn om aan te nemen dat ze niet vegetarisch waren, simpelweg omdat ze geen lunch nodig hadden. Het IF-statement bevat daarom een ​​tweede, genest if-statement:

If chkVegetarian = True Dan ActiveCell.Offset(0, 6).Value = "Ja" Anders If chkLunch = False Dan ActiveCell.Offset(0, 6).Value = "" Else ActiveCell.Offset(0, 6).Waarde = "Nee" Einde Als Einde Als 

Een vinkje in het vakje betekent "Ja", de persoon is vegetariër. Als er geen vinkje in het vakje staat, kijkt de geneste IF-instructie naar het selectievakje Lunch vereist. Als het selectievakje Lunch vereist een vinkje heeft, betekent geen vinkje in het selectievakje Vegetarisch dat de persoon niet vegetarisch is, dus voegt het "Nee" in de cel in. Als het selectievakje Lunch vereist echter geen vinkje heeft, weten we niet of de persoon vegetariër is (het maakt toch niet uit), dus de cel wordt leeg gelaten ("").

Ten slotte wordt de selectie teruggebracht naar het begin van het werkblad, klaar voor de volgende invoer:

Bereik ("A1"). Selecteer

De code toevoegen 3: het formulier manipuleren

Tot slot een voorbeeld van hoe de besturingselementen op een formulier kunnen worden gemanipuleerd terwijl het in gebruik is. Toen de controle-eigenschappen werden ingesteld, Ingeschakeld eigenschap van het selectievakje Vegetarisch is ingesteld op niet waar. Als een besturing niet is ingeschakeld, gebruiker kan er geen waarde in invoeren, hoewel het een waarde kan bevatten die er al was, en VBA kan de waarde toevoegen, verwijderen of wijzigen.

We hoeven niet te weten of de persoon vegetariër is (zelfs als dat zo is!) als hij geen lunch bestelt. Het selectievakje Vegetarisch blijft dus uitgeschakeld, tenzij er een vinkje wordt geplaatst in het selectievakje Lunch vereist. De gebruiker is dan vrij om het vakje Vegetarisch aan te vinken als hij dat wil. Als ze het aanvinken, weten we dat ze "Ja" hebben geantwoord en als ze dat niet doen, weten we dat ze "Nee" hebben geantwoord.

We kunnen de Ingeschakeld eigendom van niet waar tot Waar door een procedure te hebben die automatisch wordt uitgevoerd wanneer de waarde van het selectievakje Lunch vereist verandert. Gelukkig hebben meer bedieningselementen een Wijziging procedure en degene die we hier gebruiken is chkLunch_Change(). We gebruiken dit om het selectievakje Vegetarisch in te schakelen wanneer het selectievakje Lunch vereist is aangevinkt, en om het uit te schakelen wanneer het selectievakje Lunch vereist niet is aangevinkt.

Er is nog één ding dat we moeten doen. Stel dat iemand het selectievakje Lunch vereist heeft aangevinkt, en ook het selectievakje Vegetarisch. Toen veranderden ze van gedachten en verwijderden ze het vinkje uit het selectievakje Lunch vereist. Het selectievakje Vegetarisch zou worden uitgeschakeld, maar het vinkje dat eerder was ingeschakeld, blijft bestaan.

Een extra regel code kan ervoor zorgen dat het vinkje wordt verwijderd wanneer het vakje is uitgeschakeld. Hier is het hele ding:

Private Sub chkLunch_Change() If chkLunch = True Dan chkVegetarian.Enabled = True Anders chkVegetarian.Enabled = False chkVegetarian = False End If End Sub 

Het formulier openen

Het formulier is nu klaar voor gebruik, dus het moet worden geopend met een eenvoudige macro. Dat kan worden gekoppeld aan een aangepaste werkbalkknop, een opdrachtknop die op het werkblad is getekend of een afbeelding (klik met de rechtermuisknop op de afbeelding en kies Macro toewijzen). Maak indien nodig een nieuwe module voor de werkmap en voeg deze procedure toe:

Sub OpenCourseBookingForm() frmCourseBooking.Show End Sub 

Als je onze blogs leuk vond, deel deze dan met je vrienden op Facebook. En je kunt ons ook volgen op Twitter en Facebook.
We horen graag van je, laat ons weten hoe we ons werk kunnen verbeteren, aanvullen of vernieuwen en het voor jou beter kunnen maken. Schrijf ons op de e-mailsite