Im Folgenden sehen wir uns ein Programm in an Excel VBA das schafft eine interaktives Benutzerformular. Die Userform, die wir erstellen werden, sieht wie folgt aus:
Erläuterung: Immer wenn Sie einen Wert in das ID-Textfeld eingeben, lädt Excel VBA den entsprechenden Datensatz. Wenn Sie auf die Schaltfläche Bearbeiten / Hinzufügen klicken, bearbeitet Excel VBA den Datensatz auf dem Blatt oder fügt den Datensatz hinzu, wenn die ID noch nicht vorhanden ist. Die Schaltfläche Löschen löscht alle Textfelder. Die Schaltfläche Schließen schließt das Benutzerformular.
Führen Sie die folgenden Schritte aus, um dieses Benutzerformular zu erstellen.
1. Öffnen Sie den Visual Basic-Editor. Wenn der Projekt-Explorer nicht sichtbar ist, klicken Sie auf Ansicht, Projekt-Explorer.
2. Klicken Sie auf Einfügen, Benutzerformular. Wenn die Toolbox nicht automatisch angezeigt wird, klicken Sie auf Ansicht, Toolbox. Ihr Bildschirm sollte wie folgt eingerichtet sein.
3. Fügen Sie die Beschriftungen, Textfelder (das erste oben, das zweite unter dem ersten usw.) und die Befehlsschaltflächen hinzu. Sobald dies abgeschlossen ist, sollte das Ergebnis mit dem zuvor gezeigten Bild des Benutzerformulars übereinstimmen. Erstellen Sie beispielsweise ein Textfeld-Steuerelement, indem Sie in der Toolbox auf TextBox klicken. Als Nächstes können Sie ein Textfeld auf das Benutzerformular ziehen.
4. Sie können die Namen und Beschriftungen der Steuerelemente ändern. Namen werden im Excel VBA-Code verwendet. Untertitel sind die, die auf Ihrem Bildschirm erscheinen. Es hat sich bewährt, die Namen der Steuerelemente zu ändern, aber dies ist hier nicht erforderlich, da wir in diesem Beispiel nur wenige Steuerelemente haben. Um die Beschriftung der Beschriftungen, Textfelder und Befehlsschaltflächen zu ändern, klicken Sie auf Ansicht, Eigenschaftenfenster und klicken Sie auf jedes Steuerelement.
5. Platzieren Sie in Ihrem Arbeitsblatt eine Befehlsschaltfläche, und fügen Sie die folgende Codezeile hinzu, um das Benutzerformular anzuzeigen:
Private Sub CommandButton1_Click()
UserForm1.Show
End Sub
Wir werden jetzt die Sub UserForm_Initialize erstellen. Wenn Sie die Show-Methode für das Userform verwenden, wird dieses Sub automatisch ausgeführt.
6. Öffnen Sie den Visual Basic-Editor.
7. Klicken Sie in dem Projekt-Explorer mit der rechten Maustaste auf UserForm1 und klicken Sie dann auf Code anzeigen.
8. Wählen Sie Benutzerformular aus der linken Dropdown-Liste. Wählen Sie Initialisieren aus der rechten Dropdown-Liste.
9. Fügen Sie die folgende Codezeile hinzu:
Private Sub UserForm_Initialize()
TextBox1.SetFocus
End Sub
Erläuterung: Diese Codezeile setzt den Fokus auf das erste Textfeld, da hier beim Laden des Benutzerformulars begonnen werden soll.
Wir haben nun den ersten Teil des Userform erstellt. Obwohl es bereits ordentlich aussieht, passiert noch nichts, wenn wir einen Wert in das ID-Textfeld eingeben oder auf eine der Befehlsschaltflächen klicken.
10. Klicken Sie im Projekt-Explorer mit der rechten Maustaste auf UserForm1 und klicken Sie dann auf Code anzeigen.
11. Wählen Sie TextBox1 aus der linken Dropdown-Liste. Wählen Sie Ändern aus der rechten Dropdown-Liste.
12. Fügen Sie die folgende Codezeile hinzu:
Private Sub TextBox1_Change()
Daten empfangen
End Sub
13. Doppelklicken Sie im Projekt-Explorer auf UserForm1.
14. Doppelklicken Sie auf die Befehlsschaltfläche Bearbeiten / Hinzufügen.
15. Fügen Sie die folgende Codezeile hinzu:
Private Sub CommandButton1_Click()
BearbeitenHinzufügen
End Sub
16. Doppelklicken Sie auf die Befehlsschaltfläche Löschen.
17. Fügen Sie die folgende Codezeile hinzu:
Private Sub CommandButton2_Click()
Klare Form
End Sub
Erklärung: Diese Subs rufen andere Subs auf, die wir gleich erstellen werden.
18. Doppelklicken Sie auf die Befehlsschaltfläche Schließen.
19. Fügen Sie die folgende Codezeile hinzu:
Private Sub CommandButton3_Click()
Entlade mich
End Sub
Erläuterung: Diese Codezeile schließt das Benutzerformular.
Zeit, die Subs zu erstellen. Sie können unser Kapitel „Funktion und Unter“ durchgehen, um mehr über Untergeordnete zu erfahren. Wenn Sie es eilig haben, platzieren Sie einfach die folgenden Subs in einem Modul (Klicken Sie im Visual Basic-Editor auf Einfügen, Modul).
20. Deklarieren Sie zunächst drei Variablen vom Typ Integer und eine Variable vom Typ Boolean. Deklarieren Sie die Variablen im Abschnitt Allgemeine Deklarationen (am Anfang des Moduls). Auf diese Weise müssen Sie die Variablen nur einmal deklarieren und können sie in mehreren Subs verwenden.
Dim id As Integer, i As Integer, j As Integer, Flag As Boolean
21. Fügen Sie das GetData-Sub hinzu.
Unter GetData()
If IsNumeric(UserForm1.TextBox1.Value) Then
Flagge = Falsch
ich = 0
id = UserForm1.TextBox1.Value
Do While Cells(i + 1, 1).Wert ""
Wenn Zellen(i + 1, 1).Wert = id Then
Flagge = Wahr
Für j = 2 bis 3
UserForm1.Controls("TextBox" & j).Wert = Zellen(i + 1, j).Wert
Nächstes j
Ende Wenn
ich = ich + 1
Schleife
Wenn Flag = False Then
Für j = 2 bis 3
UserForm1.Controls("TextBox" & j).Value = ""
Nächstes j
Ende Wenn
Anders
Klare Form
Ende Wenn
End Sub
Erläuterung: Wenn das ID-Textfeld einen numerischen Wert enthält, sucht Excel VBA nach der ID und lädt den entsprechenden Datensatz. Wir verwenden die Controls-Sammlung, um Textfelder einfach zu durchlaufen. Wenn Excel VBA die ID nicht finden kann (Flag ist immer noch False), werden das zweite und dritte Textfeld geleert. Wenn das ID-Textfeld keinen numerischen Wert enthält, ruft Excel VBA das ClearForm-Sub auf.
22. Fügen Sie das ClearForm-Sub hinzu.
Unter ClearForm()
Für j = 1 bis 3
UserForm1.Controls("TextBox" & j).Value = ""
Nächstes j
End Sub
Erläuterung: Excel VBA löscht alle Textfelder.
23. Fügen Sie das Sub BearbeitenAdd hinzu.
Unter BearbeitenAdd()
Leere Zeile so lang dimmen
Wenn UserForm1.TextBox1.Value "" Then
Flagge = Falsch
ich = 0
id = UserForm1.TextBox1.Value
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
Do While Cells(i + 1, 1).Wert ""
Wenn Zellen(i + 1, 1).Wert = id Then
Flagge = Wahr
Für j = 2 bis 3
Zellen(i + 1, j).Wert = UserForm1.Controls("TextBox" & j).Wert
Nächstes j
Ende Wenn
ich = ich + 1
Schleife
Wenn Flag = False Then
Für j = 1 bis 3
Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value
Nächstes j
Ende Wenn
Ende Wenn
End Sub
Erläuterung: Wenn das ID-Textfeld nicht leer ist, bearbeitet Excel VBA den Datensatz auf dem Blatt (das Gegenteil vom Laden eines Datensatzes, wie wir zuvor gesehen haben). Wenn Excel VBA die ID nicht finden kann (Flag ist immer noch False), fügt es den Datensatz in die nächste leere Zeile ein. Die Variable emptyRow ist die erste leere Zeile und wird jedes Mal erhöht, wenn ein Datensatz hinzugefügt wird.
24. Beenden Sie den Visual Basic Editor, geben Sie die unten gezeigten Beschriftungen in Zeile 1 ein und testen Sie das Userform.