Das Kursbuchungsformular ist ein einfaches Formular, das die Prinzipien des UserForm-Designs und die zugehörige VBA-Codierung veranschaulicht.

Es werden eine Auswahl von Steuerelementen verwendet, darunter Textfelder, Kombinationsfelder, in einem Rahmen gruppierte Optionsfelder, 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 der Excel-Form:

Es gibt zwei einfache Textfelder (Name: _ und _Phone: _), in die der Benutzer freien Text eingeben kann, und zwei Kombinationsfelder (_Department und Course)

Dadurch kann der Benutzer ein Element aus der Liste auswählen.

Es gibt drei Optionsfelder (Introduction, Intermediate und Advanced), die in einem Frame (Level) gruppiert sind, sodass der Benutzer nur eine der Optionen auswählen kann.

Es gibt zwei Kontrollkästchen (Lunch Required und Vegetarian), die bei Bedarf ausgewählt werden können, da sie nicht in einem Frame gruppiert sind.

Wenn die Person, die die Buchung vornimmt, kein Mittagessen möchte, müssen wir nicht wissen, ob sie Vegetarier ist oder nicht. Daher ist das Kontrollkästchen Vegetarian bis zur Verwendung ausgegraut.

Es gibt drei Befehlsschaltflächen (OK, Cancel und Clear Form), von denen jede beim Klicken eine vordefinierte Funktion ausführt.

Die Einstellungen für die Steuerungseigenschaften:

Control

Type

Property

Setting

UserForm

UserForm

Name

frmCourseBooking

Caption

Course Booking Form

Name

Text Box

Name

txtName

Phone

Text Box

Name

txtPhone

Department

Combo Box

Name

cboDepartment

Course

Combo Box

Name

cboCourse

Level

Frame

Name

fraLevel

Caption

Level

Introduction

Option Button

Name

optIntroduction

Intermediate

Option Button

Name

optIntermediate

Advanced

Option Button

Name

optAdvanced

Lunch Required

Check Box

Name

chkLunch

Vegetarian

Check Box

Name

chkVegetarian

Enabled

False

OK

Command Button

Name

cmdOk

Caption

OK

Default

True

Cancel

Command Button

Name

cmdCancel

Caption

Cancel

Cancel

True

Clear Form

Command Button

Name

cmdClearForm

=== Formulare in Excel erstellen Wenn Sie das Formular selbst erstellen möchten, kopieren Sie einfach das in der obigen Abbildung gezeigte Layout. Führen Sie die folgenden Schritte aus:

  1. Öffnen Sie die Arbeitsmappe, zu der das Formular gehören soll (UserForms wie Makros müssen an eine Arbeitsmappe angehängt werden) und wechseln Sie zum Visual Basic-Editor.

  2. Klicken Sie im Visual Basic-Editor auf die Schaltfläche UserForm einfügen (oder gehen Sie zu Einfügen> UserForm).

  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 die Schaltfläche Toolbox (oder gehen Sie zu Ansicht> Toolbox).

  4. Um ein Steuerelement im Formular zu platzieren, klicken Sie auf die entsprechende Schaltfläche in der Toolbox und dann auf das Formular. Steuerelemente können durch Ziehen an den Kanten 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, stellen Sie sicher, dass das ausgewählte Steuerelement ausgewählt ist, und nehmen Sie die entsprechenden Änderungen im Eigenschaftenfenster vor. 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 der Tastatur auf die Entf-Taste.

Eine UserForm wird erst dann etwas tun, wenn der Code erstellt wurde, der das Formular und seine verschiedenen Steuerelemente steuert. 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 das Feld leer ist, oder das Erstellen von Listen mit Kombinationsfeldern sein. Dieser Prozess heißt Initializing the Form und wird von einem Makro namens UserForm_Initialize erledigt (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 für Sie buchstabieren!). So erstellen Sie den Code zum Initialisieren des Kursbuchungsformulars:

  1. Um das Codefenster des Formulars anzuzeigen, gehen Sie zu Ansicht> Code oder klicken Sie auf F7.

  2. Wenn das Codefenster zum ersten Mal geöffnet wird, enthält es eine leere UserForm_Click () -Prozedur. Verwenden Sie die Dropdown-Listen oben im Codefenster, um UserForm und Initialize auszuwählen. Dadurch wird die Prozedur erstellt, die Sie benötigen. Sie können jetzt die UserForm_Click () -Prozedur löschen.

  3. Geben Sie den folgenden Code in die Prozedur ein:

Private Sub UserForm_Initialize()

txtName.Value = ""

txtPhone.Value = ""

With 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 = False

chkVegetarian = False

txtName.SetFocus

End Sub

Funktionsweise des Initialisierungscodes:

Der Zweck der UserForm_Initialize () -Prozedur 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 auf leer:

txtName.Value = ""

txtPhone.Value = ""

Als nächstes folgen die Anweisungen für die Kombinationsfelder. Zuerst wird der Inhalt der Liste angegeben, dann wird der Anfangswert des Kombinationsfelds auf leer gesetzt.

With cboDepartment

.AddItem "Sales"

.AddItem "Marketing"

(as many as necessary…)

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 gesetzt (d. h. kein Häkchen). Setzen Sie diesen Wert auf True, wenn das Kontrollkästchen bereits aktiviert sein soll:

chkLunch = False chkVegetarian = False Schließlich wird der Fokus auf das erste Textfeld gelegt. Dadurch wird der Benutzercursor in das Textfeld eingefügt, sodass er nicht auf das Feld klicken muss, bevor er mit der Eingabe beginnt:

txtName.SetFocus === Hinzufügen des Codes: 2 Funktionsweise der Schaltflächen Das Formular enthält drei Befehlsschaltflächen, die jeweils durch eine eigene Prozedur aktiviert werden müssen. Beginnend mit den einfachen…

Codierung der Abbrechen-Schaltfläche:

Zuvor haben wir das Eigenschaftenfenster verwendet, um die Eigenschaft Abbrechen der Schaltfläche Abbrechen auf True zu setzen. Wenn Sie die Cancel-Eigenschaft einer Befehlsschaltfläche auf True setzen, hat dies den Effekt, dass Sie auf diese Schaltfläche „klicken“, wenn der Benutzer die Esc-Taste auf seiner Tastatur drückt. Dies allein führt jedoch nicht dazu, dass der Form etwas passiert. Sie müssen den Code für das Klickereignis der Schaltfläche erstellen, mit dem in diesem Fall das Formular geschlossen wird. So geht’s:

  1. Doppelklicken Sie bei geöffneter UserForm zur Bearbeitung im Visual Basic-Editor auf die Schaltfläche Abbrechen. Das Codefenster des Formulars wird mit der Prozedur cmdCancel_Click () geöffnet, die zur Bearbeitung bereit ist.

  2. Der Code zum Schließen eines Formulars ist sehr einfach. Fügen Sie der Prozedur eine Codezeile hinzu, damit sie folgendermaßen aussieht:

Private Sub cmdCancel_Click()

Unload Me

End Sub

Codierung der Schaltfläche zum Löschen von Formularen:

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 mehrere Buchungen gleichzeitig vorgenommen werden müssen. Sie müssen lediglich die Initialisierungsprozedur erneut ausführen. Ein Makro kann mithilfe des Schlüsselworts Call angewiesen werden, ein anderes Makro (oder eine Reihe von Makros, falls erforderlich) auszuführen:

  1. Doppelklicken Sie auf die Schaltfläche Formular löschen. Das Codefenster des Formulars wird mit der Prozedur cmdClearForm_Click () geöffnet, die zur Bearbeitung bereit ist.

  2. Fügen Sie der Prozedur eine Codezeile hinzu, damit sie folgendermaßen aussieht:

Private Sub cmdClearForm_Click()

Call UserForm_Initialize

End Sub

Codierung 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 Default-Eigenschaft der OK-Schaltfläche auf True. Dazu muss auf die Schaltfläche OK geklickt werden, wenn der Benutzer die Eingabetaste (oder die Eingabetaste) auf seiner Tastatur drückt (vorausgesetzt, er hat die Tabulatortaste nicht verwendet, um zu einer anderen Schaltfläche zu wechseln).

Hier ist der Code, mit dem die Schaltfläche funktioniert:

  1. Doppelklicken Sie auf die Schaltfläche OK. Das Codefenster des Formulars wird mit der Prozedur cmdOK_Click () geöffnet, die zur Bearbeitung bereit ist.

  2. Bearbeiten Sie die Prozedur, um den folgenden Code hinzuzufügen:

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 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 = "Yes"

Else

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").Select

End Sub

Funktionsweise des CmdOK_Click-Codes:

Die ersten beiden Zeilen stellen sicher, dass die richtige Arbeitsmappe aktiv ist, und verschieben die Auswahl in Zelle A1:

ActiveWorkbook.Sheets("Course Bookings").Activate

Range("A1").Select

The next few lines moves the selection down the worksheet until it finds an empty cell:

Do

If IsEmpty(ActiveCell) = False Then

ActiveCell.Offset(1, 0).Select

End If

Loop Until IsEmpty(ActiveCell) = True

In den nächsten vier Zeilen wird der Inhalt des Formulars in das Arbeitsblatt geschrieben, wobei die aktive Zelle (in Spalte A) als Referenz verwendet wird und jeweils eine Zeile in der Zeile verschoben wird:

ActiveCell.Value = txtName.Value

ActiveCell.Offset(0, 1) = txtPhone.Value

ActiveCell.Offset(0, 2) = cboDepartment.Value

ActiveCell.Offset(0, 3) = cboCourse.Value

Nun 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"

Else

ActiveCell.Offset(0, 4).Value = "Adv"

End If

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 für jede eine zusätzliche ElseIf ein. Wenn es nur zwei Optionen gäbe, würden Sie das ElseIf nicht benötigen, nur das If und das Else würden ausreichen (nicht vergessen – alle benötigen ein End If).

Für jedes Kontrollkästchen gibt es eine andere IF-Anweisung. Für das Kontrollkästchen Mittagessen erforderlich bedeutet ein Häkchen im Feld „Ja“, dass die Person ein Mittagessen benötigt, und kein Häkchen bedeutet „Nein“, was sie nicht tut.

If chkLunch = True Then

ActiveCell.Offset(0, 5).Value = "Yes"

Else

ActiveCell.Offset(0, 5).Value = "No"

End If

Wir könnten eine ähnliche IF-Anweisung für das Kontrollkästchen Vegetarisch verwenden, aber wenn die Person kein Mittagessen benötigt, ist es unerheblich, ob sie Vegetarierin ist oder nicht. In jedem Fall wäre es falsch anzunehmen, dass sie nicht vegetarisch waren, nur weil sie kein Mittagessen benötigten. Die IF-Anweisung enthält daher eine zweite verschachtelte if-Anweisung:

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

Ein Häkchen in der Box bedeutet „Ja“, die Person ist Vegetarierin. Wenn das Kontrollkästchen kein Häkchen enthält, aktiviert 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, sodass „Nein“ in die Zelle eingefügt wird. Wenn das Kontrollkästchen Mittagessen erforderlich jedoch kein Häkchen enthält, wissen wir nicht, ob die Person Vegetarierin ist oder nicht (es spielt sowieso keine Rolle), sodass die Zelle leer bleibt („“).

Schließlich wird die Auswahl zum Anfang des Arbeitsblatts zurückgeführt und ist für den nächsten Eintrag bereit:

Bereich („A1“). Wählen Sie === Hinzufügen des Codes 3: Bearbeiten des Formulars Zum Schluss ein Beispiel, wie die Steuerelemente eines Formulars während der Verwendung bearbeitet werden können. Wenn die Steuereigenschaften festgelegt wurden, wurde die Enabled-Eigenschaft des Kontrollkästchens Vegetarian auf False gesetzt. Wenn ein Steuerelement nicht aktiviert ist, kann der Benutzer keinen Wert eingeben, obwohl er einen bereits vorhandenen Wert enthalten kann, und VBA kann den Wert hinzufügen, entfernen oder ändern.

Wir müssen nicht wissen, ob die Person Vegetarierin ist oder nicht (auch wenn sie es ist!), Wenn sie kein Mittagessen bestellt. Das Kontrollkästchen Vegetarisch bleibt also deaktiviert, es sei denn, das Kontrollkästchen Mittagessen erforderlich ist aktiviert. Dann kann der Benutzer das Kontrollkästchen Vegetarisch aktivieren, wenn er möchte. Wenn sie es ankreuzen, werden wir wissen, dass sie mit „Ja“ geantwortet haben, und wenn sie es nicht wissen, wissen sie, dass sie mit „Nein“ geantwortet haben.

Wir können die Enabled-Eigenschaft von False auf True umschalten, indem wir eine Prozedur verwenden, die automatisch ausgeführt wird, wenn sich der Wert des Kontrollkästchens Lunch Required ändert. Glücklicherweise haben mehr Steuerelemente eine Change-Prozedur und die hier verwendete ist chkLunch_Change (). Wir werden dies verwenden, um das Kontrollkästchen Vegetarisch zu aktivieren, wenn das Kontrollkästchen Mittagessen erforderlich aktiviert ist, und um es zu deaktivieren, wenn das Kontrollkästchen Mittagessen erforderlich nicht aktiviert ist.

Wir müssen nur noch eins tun. Angenommen, jemand hat das Kontrollkästchen Mittagessen erforderlich und 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 ist deaktiviert, aber das zuvor eingegebene Häkchen bleibt erhalten.

Eine zusätzliche Codezeile kann sicherstellen, dass das Häkchen entfernt wird, wenn das Feld deaktiviert ist. Hier ist das Ganze:

Private Sub chkLunch_Change()

If chkLunch = True Then

chkVegetarian.Enabled = True

Else

chkVegetarian.Enabled = False

chkVegetarian = False

End If

End Sub

Öffnen des Formulars Das Formular ist jetzt einsatzbereit und muss mit einem einfachen Makro geöffnet werden. Dies kann an eine benutzerdefinierte Symbolleistenschaltfläche, eine im 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 gegebenenfalls ein neues Modul für die Arbeitsmappe und fügen Sie das folgende Verfahren hinzu:

Sub OpenCourseBookingForm()

frmCourseBooking.Show

End Sub

Wenn Ihnen unsere Blogs gefallen haben, teilen Sie sie Ihren Freunden auf Facebook mit. Sie können uns auch auf Twitter und Facebook folgen.

Wir würden gerne von Ihnen hören, lassen Sie uns wissen, wie wir unsere Arbeit verbessern, ergänzen oder innovieren und für Sie verbessern können. Schreiben Sie uns an [email protected]