Excel VBA Interaktive Benutzerform
Unten sehen wir uns ein Programm in Excel VBA das schafft ein interaktive Benutzerform. Die Benutzerform, die wir erstellen werden, sieht folgendermaßen aus:
Erläuterung: Wenn Sie einen Wert in das Textfeld ID 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 die Benutzerform.
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, die Textfelder (zuerst oben, die 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 Textfeldsteuerelement, indem Sie in der Toolbox auf TextBox klicken. Als Nächstes können Sie ein Textfeld auf dem Benutzerformular ziehen.
4. Sie können die Namen und die Beschriftungen der Steuerelemente ändern. Namen werden im Excel-VBA-Code verwendet. Untertitel sind diejenigen, die auf Ihrem Bildschirm erscheinen. Es empfiehlt sich, die Namen der Steuerelemente zu ändern. Dies ist jedoch nicht erforderlich, da in diesem Beispiel nur wenige Steuerelemente vorhanden sind. Um die Beschriftung der Beschriftungen, Textfelder und Befehlsschaltflächen zu ändern, klicken Sie auf Ansicht, Eigenschaftenfenster, und klicken Sie auf jedes Steuerelement.
5. Um das Benutzerformular anzuzeigen, platzieren Sie eine Befehlsschaltfläche in Ihrem Arbeitsblatt und fügen Sie die folgende Codezeile hinzu:
UserForm1.Show
End Sub
Wir werden jetzt die Sub UserForm_Initialize erstellen. Wenn Sie die Show-Methode für das Benutzerformular verwenden, wird dieses Sub-Objekt automatisch ausgeführt.
6. Öffnen Sie den Visual Basic-Editor.
7. Klicken Sie im Projektexplorer mit der rechten Maustaste auf UserForm1, und klicken Sie dann auf Code anzeigen.
8. Wählen Sie Benutzerform in der linken Dropdown-Liste. Wählen Sie Initialisieren aus der rechten Dropdown-Liste.
9. Fügen Sie die folgende Codezeile hinzu:
TextBox1.SetFocus
End Sub
Erläuterung: In dieser Codezeile wird der Fokus auf das erste Textfeld gesetzt, da dies beim Starten des Benutzerformulars gestartet werden soll.
Wir haben jetzt den ersten Teil des Benutzerformulars erstellt. Obwohl es bereits ordentlich aussieht, wird nichts passieren, wenn wir einen Wert in das Textfeld ID eingeben oder auf eine der Befehlsschaltflächen klicken.
10. Klicken Sie im Projektexplorer 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:
GetData
End Sub
13. Doppelklicken Sie im Projektexplorer auf UserForm1.
14. Doppelklicken Sie auf die Schaltfläche Bearbeiten / Hinzufügen.
15. Fügen Sie die folgende Codezeile hinzu:
EditAdd
End Sub
16. Doppelklicken Sie auf die Befehlsschaltfläche Löschen.
17. Fügen Sie die folgende Codezeile hinzu:
ClearForm
End Sub
Erklärung: Diese Subs rufen andere Subs auf, die wir in einer Sekunde erstellen werden.
18. Doppelklicken Sie auf die Schaltfläche Schließen.
19. Fügen Sie die folgende Codezeile hinzu:
Unload Me
End Sub
Erläuterung: Diese Codezeile schließt das Benutzerformular.
Zeit, um die Subs zu erstellen. Sie können unser Kapitel Funktion und Unter durchgehen, um mehr über Subs zu erfahren. Wenn Sie es eilig haben, legen Sie einfach die folgenden Subs in ein Modul (Klicken Sie im Visual Basic-Editor auf Einfügen, Modul).
20. Deklarieren Sie zuerst drei Variablen vom Typ Integer und eine Variable vom Typ Boolean. Deklarieren Sie die Variablen im Abschnitt Allgemeine Deklarationen (oben im Modul). Auf diese Weise müssen Sie die Variablen nur einmal deklarieren und sie in mehreren Subs verwenden.
21. Fügen Sie den GetData-Sub hinzu.
If IsNumeric(UserForm1.TextBox1.Value) Then
flag = False
i = 0
id = UserForm1.TextBox1.Value
Do While Cells(i + 1, 1).Value <> ""
If Cells(i + 1, 1).Value = id Then
flag = True
For j = 2 To 3
UserForm1.Controls("TextBox" & j).Value = Cells(i + 1, j).Value
Next j
End If
i = i + 1
Loop
If flag = False Then
For j = 2 To 3
UserForm1.Controls("TextBox" & j).Value = ""
Next j
End If
Else
ClearForm
End If
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 Collection, um Textboxen einfach zu durchlaufen. Wenn Excel VBA die ID nicht finden kann (Flag ist immer noch False), leert es das zweite und dritte Textfeld. Wenn das ID-Textfeld keinen numerischen Wert enthält, ruft Excel VBA den ClearForm-Sub auf.
22. Fügen Sie den ClearForm-Sub hinzu.
For j = 1 To 3
UserForm1.Controls("TextBox" & j).Value = ""
Next j
End Sub
Erläuterung: Excel VBA löscht alle Textfelder.
23. Fügen Sie die EditAdd-Untergruppe hinzu.
Dim emptyRow As Long
If UserForm1.TextBox1.Value <> "" Then
flag = False
i = 0
id = UserForm1.TextBox1.Value
emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
Do While Cells(i + 1, 1).Value <> ""
If Cells(i + 1, 1).Value = id Then
flag = True
For j = 2 To 3
Cells(i + 1, j).Value = UserForm1.Controls("TextBox" & j).Value
Next j
End If
i = i + 1
Loop
If flag = False Then
For j = 1 To 3
Cells(emptyRow, j).Value = UserForm1.Controls("TextBox" & j).Value
Next j
End If
End If
End Sub
Erläuterung: Wenn das ID-Textfeld nicht leer ist, bearbeitet Excel VBA den Datensatz auf dem Blatt (das Gegenteil von dem Laden eines Datensatzes, wie wir zuvor gesehen haben). Wenn Excel VBA die ID nicht finden kann (Flag ist immer noch False), wird der Datensatz zur nächsten leeren Zeile hinzugefügt. Die Variable emptyRow ist die erste leere Zeile und erhöht sich jedes Mal, wenn ein Datensatz hinzugefügt wird.
24. Beenden Sie den Visual Basic-Editor, geben Sie die folgenden Beschriftungen in Zeile 1 ein, und testen Sie das Benutzerformular.