Die Kursbuchungsformular ist ein einfaches Formular, das die Prinzipien des UserForm-Designs und die damit verbundene VBA-Codierung veranschaulicht.
Es verwendet eine Auswahl von Steuerelementen, einschließlich Textfeldern, Kombinationsfeldern, in einem Rahmen gruppierten Optionsfeldern, Kontrollkästchen und Befehlsschaltflächen.
Wenn der Benutzer auf die Schaltfläche OK klickt, wird seine Eingabe in die nächste verfügbare Zeile des Arbeitsblatts eingegeben.
Beschreibung des Excel-Formulars:
Es gibt zwei einfache Textfelder (Name: und Telefon:), in die der Benutzer Freitext eingeben kann, und zwei Kombinationsfelder (Abteilung und Kurs), mit denen der Benutzer ein Element aus der Liste auswählen kann.
Es gibt drei Optionsschaltflächen (Einführung, Dazwischenliegend und Fortschrittlich) gruppiert in einem Rahmen (Niveau), sodass der Benutzer nur eine der Optionen auswählen kann.
Es gibt zwei Kontrollkästchen (Mittagessen erforderlich und Vegetarier), die, da sie nicht in einem Rahmen gruppiert sind, bei Bedarf beide ausgewählt werden können. Wenn die buchende Person jedoch kein Mittagessen wünscht, müssen wir nicht wissen, ob sie Vegetarier ist oder nicht. Also, die Vegetarier Das Kontrollkästchen ist ausgegraut, bis es benötigt wird.
Es gibt drei Befehlsschaltflächen (OK, Abbrechen und Klare Form), von denen jedes beim Anklicken eine vordefinierte Funktion ausführt.
Die Einstellungen der Control-Eigenschaften:
Steuerung | Typ | Eigentum | Einstellung |
Benutzerformular | Benutzerformular | Name | frmKursBuchung |
Untertitel | Kursbuchungsformular | ||
Name | Textfeld | Name | txtName |
Telefon | Textfeld | Name | txtTelefon |
Abteilung | Kombinationsfeld | Name | cboAbteilung |
Kurs | Kombinationsfeld | Name | cboKurs |
Niveau | Rahmen | Name | fraLevel |
Untertitel | Niveau | ||
Einführung | Optionsschaltfläche | Name | optEinleitung |
Dazwischenliegend | Optionsschaltfläche | Name | optIntermediate |
Fortschrittlich | Optionsschaltfläche | Name | optAdvanced |
Mittagessen erforderlich | Kontrollkästchen | Name | chkMittagessen |
Vegetarier | Kontrollkästchen | Name | chkVegetarisch |
Ermöglicht | Falsch | ||
OK | Befehlsschaltfläche | Name | cmdOk |
Untertitel | OK | ||
Standard | Wahr | ||
Abbrechen | Befehlsschaltfläche | Name | cmdAbbrechen |
Untertitel | Abbrechen | ||
Abbrechen | Wahr | ||
Klare Form | Befehlsschaltfläche | Name | cmdClearForm |
Formulare in Excel erstellen
Wenn Sie das Formular selbst erstellen möchten, kopieren Sie einfach das in der Abbildung oben gezeigte Layout. Folgen Sie den unteren Schritten:
1. Öffnen Sie die Arbeitsmappe, in die das Formular gehören soll (UserForms wie Makros müssen an eine Arbeitsmappe angehängt werden) und wechseln Sie in den Visual Basic-Editor.
2. Klicken Sie im Visual Basic-Editor auf UserForm einfügen Taste (oder gehe zu Einfügen > Benutzerformular).
3. Wenn die Toolbox nicht von selbst angezeigt wird (klicken Sie zuerst auf das Formular, um sicherzustellen, dass es nicht ausgeblendet wird), klicken Sie auf Werkzeugkasten Taste (oder gehe zu Ansicht > Toolbox).
4. Um ein Steuerelement in das Formular einzufügen, klicken Sie auf die entsprechende Schaltfläche in der Toolbox und dann auf das Formular. Steuerelemente können durch Ziehen an ihren Rändern verschoben oder in der Größe geändert werden, indem die Schaltflächen um ihren Umfang gezogen werden.
5. Um die Eigenschaften eines Steuerelements zu bearbeiten, vergewissern Sie sich, dass das gewählte Steuerelement ausgewählt ist, und nehmen Sie dann die entsprechenden Änderungen im Menü vor Eigenschaften Fenster. Wenn Sie das Eigenschaftenfenster nicht sehen können, gehen Sie zu Ansicht > Eigenschaftenfenster.
6. Um ein Steuerelement aus dem Formular zu entfernen, wählen Sie es aus und klicken Sie auf die Schaltfläche Löschen Taste auf Ihrer Tastatur.
Eine UserForm wird nichts tun, bis der Code, der das Formular steuert, und seine verschiedenen Steuerelemente erstellt wurde. Der nächste Schritt besteht darin, den Code zu schreiben, der das Formular selbst steuert.
Hinzufügen des Codes: 1 Initialisieren des Formulars
Initialisieren des Formulars:
Die meisten Formulare müssen beim Öffnen eingerichtet werden. Dies kann das Festlegen von Standardwerten, das Sicherstellen, dass die Felder leer sind, oder das Erstellen von Listen mit Kombinationsfeldern sein. Dieser Vorgang heißt Initialisieren des Formulars und es wird von einem Makro namens UserForm_Initialize übernommen (falls Sie durch meine unterschiedliche Schreibweise des Wortes "initialis(z)e" verwirrt sind, liegt es daran, dass ich Englisch spreche und VBA Amerikanisch spricht - aber keine Sorge, VBA wird es tun buchstabiere es für dich!). So erstellen Sie den Code zum Initialisieren des Kursbuchungsformulars:
1. Um das Codefenster des Formulars anzuzeigen, gehen Sie zu Ansicht > Code oder klick F7.
2. Wenn das Codefenster zum ersten Mal geöffnet wird, enthält es ein leeres UserForm_Click() Verfahren. Verwenden Sie die Dropdown-Listen oben im Codefenster, um auszuwählen Benutzerformular und Initialisieren. Dadurch wird das von Ihnen benötigte Verfahren erstellt. Sie können jetzt die Prozedur UserForm_Click() löschen.
3. Geben Sie den folgenden Code in die Prozedur ein:
Private Sub UserForm_Initialize() txtName.Value = "" txtPhone.Value = "" Mit cboDepartment .AddItem "Sales" .AddItem "Marketing" .AddItem "Administration" .AddItem "Design" .AddItem "Werbung" .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 = False txtName.SetFocus End Sub
So funktioniert der Initialisierungscode:
Der Zweck der Prozedur UserForm_Initialize() besteht darin, das Benutzerformular in VBA für die Verwendung vorzubereiten, die Standardwerte für die verschiedenen Steuerelemente festzulegen und die Listen zu erstellen, die in den Kombinationsfeldern angezeigt werden.
Diese Zeilen setzen den Inhalt der beiden Textfelder leer:
txtName.Value = "" txtPhone.Value = ""
Als nächstes kommen die Anweisungen für die Comboboxen. Zuerst wird der Inhalt der Liste angegeben, dann wird der Initialwert der Combobox auf leer gesetzt.
Mit cboDepartment .AddItem "Sales" .AddItem "Marketing" (so viele wie nötig… ) End With
cboDepartment.Value = ""
Bei Bedarf kann eine erste Auswahl aus der Optionsgruppe getroffen werden, in diesem Fall:
optIntroduction = True
Beide Kontrollkästchen sind auf False (d. h. kein Häkchen) gesetzt. Setzen Sie auf True, wenn das Kontrollkästchen bereits aktiviert angezeigt werden soll:
chkLunch = Falsch
chkVegetarisch = Falsch
Schließlich wird der Fokus auf das erste Textfeld gesetzt. Dadurch wird der Cursor des Benutzers in das Textfeld platziert, sodass er nicht auf das Feld klicken muss, bevor er mit der Eingabe beginnt:
txtName.SetFocus
Hinzufügen des Codes: 2 Funktionieren der Schaltflächen
Das Formular enthält drei Befehlsschaltflächen, von denen jede durch eine eigene Prozedur angetrieben werden muss. Angefangen bei den einfachen…
Codieren der Abbrechen-Schaltfläche:
Zuvor haben wir das Eigenschaftenfenster verwendet, um die Abbrechen Eigenschaft der Schaltfläche Abbrechen, um Wahr. Wenn Sie die Abbrechen-Eigenschaft einer Befehlsschaltfläche auf True setzen, hat dies den Effekt, dass diese Schaltfläche "angeklickt" wird, wenn der Benutzer die Esc Taste auf ihrer Tastatur. Aber das allein wird nichts mit dem Formular passieren. Sie müssen den Code für das Click-Ereignis der Schaltfläche erstellen, das in diesem Fall das Formular schließt. Hier ist wie:
1. Doppelklicken Sie bei geöffneter UserForm zum Bearbeiten im Visual Basic-Editor auf die Schaltfläche Abbrechen. Das Codefenster des Formulars öffnet sich mit dem cmdCancel_Click() Verfahren zur Bearbeitung bereit.
2. Der Code zum Schließen eines Formulars ist sehr einfach. Fügen Sie der Prozedur eine Codezeile hinzu, sodass sie wie folgt aussieht:
Private Sub cmdCancel_Click() Unload Me End Sub
Codierung des Clear Form Buttons:
Ich habe eine Schaltfläche hinzugefügt, um das Formular zu löschen, falls der Benutzer seine Meinung ändern und alles zurücksetzen möchte, und um es einfacher zu machen, wenn er mehrere Buchungen gleichzeitig vornehmen muss. Es muss lediglich die Initialisierungsprozedur erneut ausgeführt werden. Ein Makro kann angewiesen werden, ein anderes Makro (oder eine Reihe von Makros, falls erforderlich) auszuführen, indem Sie die Anruf Stichwort:
1. Doppelklicken Sie auf die Schaltfläche Formular löschen. Das Codefenster des Formulars öffnet sich mit dem cmdClearForm_Click() Verfahren zur Bearbeitung bereit.
2. Fügen Sie der Prozedur eine Codezeile hinzu, sodass sie wie folgt aussieht:
Private Sub cmdClearForm_Click() Aufruf von UserForm_Initialize End Sub
Codieren der OK-Taste:
Dies ist der Code, der die Auswahl und die Texteingabe des Benutzers auf das Arbeitsblatt übertragen muss. Wenn wir die Cancel-Eigenschaft der Cancel-Schaltfläche auf True setzen, setzen wir auch die der OK-Schaltfläche Standard Eigentum an Wahr. Dies hat das Klicken auf die Schaltfläche OK, wenn der Benutzer die Taste drückt Eintreten (oder Zurückkehren) auf ihrer Tastatur (sofern sie ihre Tab Taste, um zu einer anderen Schaltfläche zu wechseln). Hier ist der Code, damit die Schaltfläche funktioniert:
1. Doppelklicken Sie auf die Schaltfläche OK. Das Codefenster des Formulars öffnet sich mit dem cmdOK_Click() Verfahren zur Bearbeitung bereit.
2. Bearbeiten Sie das Verfahren, um den folgenden Code hinzuzufügen:
Private Sub cmdOK_Click() ActiveWorkbook.Sheets("Kursbuchungen").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 Wenn 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 If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Ja" Sonst ActiveCell.Offset(0, 5).Value = "No" Ende Wenn chkVegetarian = True Then ActiveCell.Offset(0, 6). Value = "Yes" Else If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Sonst ActiveCell.Offset(0, 6).Value = "No" End If End If Range("A1"). Wählen Sie End Sub
So funktioniert der CmdOK_Click-Code:
Die ersten beiden Zeilen stellen sicher, dass die richtige Arbeitsmappe aktiv ist und verschiebt die Auswahl in Zelle A1:
ActiveWorkbook.Sheets("Kursbuchungen").Activate Range("A1").Select Die nächsten Zeilen verschieben die Auswahl im Arbeitsblatt nach unten, bis eine leere Zelle gefunden wird: Do If IsEmpty(ActiveCell) = False Then ActiveCell.Offset(1 , 0).Wählen Sie End If Loop Until IsEmpty(ActiveCell) = True
Die nächsten vier Zeilen beginnen, den Inhalt des Formulars auf das Arbeitsblatt zu schreiben, wobei die aktive Zelle (die sich in Spalte A befindet) als Referenz verwendet und verschoben wird entlang der Reihe eine Zelle nach der anderen:
ActiveCell.Value = txtName.Value ActiveCell.Offset(0, 1) = txtPhone.Value ActiveCell.Offset(0, 2) = cboDepartment.Value ActiveCell.Offset(0, 3) = cboCourse.Value
Jetzt kommen wir zu den Optionsfeldern. Diese wurden in einem Rahmen auf dem Formular platziert, sodass der Benutzer nur einen auswählen kann. Eine IF-Anweisung wird verwendet, um Excel anzuweisen, was für jede Option zu tun ist:
If optIntroduction = True Then ActiveCell.Offset(0, 4).Value = "Intro" ElseIf optIntermediate = True Then ActiveCell.Offset(0, 4).Value = "Intermed" Sonst ActiveCell.Offset(0, 4).Value = "Adv" Ende Wenn
VBA-IF-Anweisungen sind viel einfacher zu verwalten als die IF-Funktion von Excel. Sie können so viele Optionen haben, wie Sie möchten, fügen Sie einfach eine zusätzliche ein SonstWenn für jeden. Wenn es nur zwei Möglichkeiten gäbe, bräuchte man die nicht SonstWenn, nur der Wenn und Anders würde ausreichen (nicht vergessen - sie alle brauchen einen Ende Wenn).
Für jedes Kontrollkästchen gibt es eine weitere IF-Anweisung. Für das Kontrollkästchen Mittagessen erforderlich bedeutet ein Häkchen im Kästchen "Ja", dass die Person ein Mittagessen benötigt, und kein Häkchen bedeutet "Nein", dass sie dies nicht tut.
If chkLunch = True Then ActiveCell.Offset(0, 5).Value = "Yes" Sonst ActiveCell.Offset(0, 5).Value = "No" End If
Wir könnten eine ähnliche IF-Anweisung für das Kontrollkästchen Vegetarier verwenden, aber wenn die Person kein Mittagessen benötigt, ist es irrelevant, ob sie Vegetarier ist oder nicht. Es wäre jedenfalls falsch anzunehmen, dass sie keine Vegetarier waren, nur weil sie kein Mittagessen brauchten. Die IF-Anweisung enthält daher eine zweite, verschachtelte if-Anweisung:
If chkVegetarian = True Then ActiveCell.Offset(0, 6).Value = "Ja" Sonst If chkLunch = False Then ActiveCell.Offset(0, 6).Value = "" Sonst ActiveCell.Offset(0, 6).Value = "Nein" Ende wenn Ende wenn
Ein Häkchen im Kästchen bedeutet "Ja", die Person ist Vegetarier. Wenn das Kästchen kein Häkchen enthält, prüft die verschachtelte IF-Anweisung das Kontrollkästchen Mittagessen erforderlich. Wenn das Kontrollkästchen Mittagessen erforderlich ein Häkchen enthält, bedeutet kein Häkchen im Kontrollkästchen Vegetarisch, dass die Person kein Vegetarier ist und fügt daher "Nein" in die Zelle ein. Wenn das Kontrollkästchen Mittagessen erforderlich jedoch kein Häkchen enthält, wissen wir nicht, ob die Person Vegetarier ist oder nicht (es spielt sowieso keine Rolle), sodass das Feld leer bleibt ("").
Schließlich wird die Auswahl an den Anfang des Arbeitsblatts zurückgenommen, bereit für den nächsten Eintrag:
Bereich("A1").Wählen
Hinzufügen des Codes 3: Manipulieren des Formulars
Schließlich ein Beispiel dafür, wie die Steuerelemente eines Formulars manipuliert werden können, während es verwendet wird. Wenn die Steuerelementeigenschaften festgelegt wurden, wurde die Ermöglicht Eigenschaft des Kontrollkästchens Vegetarisch wurde auf gesetzt Falsch. Wenn ein Steuerelement nicht aktiviert ist, Benutzer kann keinen Wert eingeben, obwohl es einen bereits vorhandenen Wert enthalten kann, und VBA kann den Wert hinzufügen, entfernen oder ändern.
Wir müssen nicht wissen, ob die Person Vegetarier ist oder nicht (auch wenn sie es sind!), wenn sie kein Mittagessen bestellt. Daher bleibt das Kontrollkästchen Vegetarisch deaktiviert, es sei denn, es wird ein Häkchen in das Kontrollkästchen Mittagessen erforderlich gesetzt. Dann kann der Benutzer das Kontrollkästchen Vegetarisch aktivieren, wenn er möchte. Wenn sie es ankreuzen, wissen wir, dass sie mit "Ja" geantwortet haben, und wenn nicht, wissen wir, dass sie mit "Nein" geantwortet haben.
Wir können das umschalten Ermöglicht Eigentum von Falsch zu Wahr durch eine Prozedur, die automatisch ausgeführt wird, wenn sich der Wert des Kontrollkästchens Mittagessen erforderlich ändert. Glücklicherweise haben mehr Kontrollen eine Ändern Verfahren und das, was wir hier verwenden, ist chkLunch_Change(). Wir verwenden dies, um das Kontrollkästchen Vegetarisch zu aktivieren, wenn das Kontrollkästchen Mittagessen erforderlich aktiviert ist, und es zu deaktivieren, wenn das Kontrollkästchen Mittagessen erforderlich nicht aktiviert ist.
Es gibt nur noch eine Sache, die wir tun müssen. Angenommen, jemand hat das Kontrollkästchen Mittagessen erforderlich und auch das Kontrollkästchen Vegetarisch aktiviert. Dann änderten sie ihre Meinung und entfernten das Häkchen aus dem Kontrollkästchen Mittagessen erforderlich. Das Kontrollkästchen Vegetarisch wird deaktiviert, aber das zuvor gesetzte Häkchen bleibt erhalten.
Eine zusätzliche Codezeile kann sicherstellen, dass das Häkchen entfernt wird, wenn das Kontrollkästchen deaktiviert ist. Hier ist das Ganze:
Private Sub chkLunch_Change() If chkLunch = True Then chkVegetarian.Enabled = True Sonst chkVegetarian.Enabled = False chkVegetarian = False End If End Sub
Öffnen des Formulars
Das Formular ist nun einsatzbereit und muss mit einem einfachen Makro geöffnet werden. Dies kann an eine benutzerdefinierte Symbolleistenschaltfläche, eine auf dem Arbeitsblatt gezeichnete Befehlsschaltfläche oder eine beliebige Grafik angehängt werden (klicken Sie mit der rechten Maustaste auf die Grafik und wählen Sie Makro zuweisen). Erstellen Sie bei Bedarf ein neues Modul für die Arbeitsmappe und fügen Sie dieses Verfahren hinzu:
Unter OpenCourseBookingForm() frmCourseBooking.Show End Sub
Wenn Ihnen unsere Blogs gefallen haben, teilen Sie sie mit Ihren Freunden auf Facebook. Und Sie können uns auch auf Twitter und Facebook folgen.
Wir würden uns freuen, von Ihnen zu hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern, ergänzen oder erneuern und für Sie verbessern können. Schreiben Sie uns auf der E-Mail-Site