Schauen wir uns nun eine kleine Übung an, um die Verwendung von Steuerelementen (Controls) zu üben.
Es gibt eine Datei mit einem vorgefertigten Formular und Steuerelementen. Wir müssen Code schreiben, der dafür sorgt, dass alle Elemente funktionieren, sodass der Benutzer unsere improvisierte Datenbank durch Interaktion mit dem Formular füllen kann.
Hier ist die Excel-Datei zum Herunterladen: controls_exercise.xls
Es sollte nun klar sein, dass das Ziel hier darin besteht, die Tabelle mithilfe des Formulars zu füllen.
Ein paar Punkte, die Sie beachten sollten:
Zuerst müssen wir die Eigenschaft Zoom unseres Formulars auf 120 erhöhen, um die Verwendung zu vereinfachen:
Wir haben uns bereits mit der Überprüfung von Optionsschaltflächen befasst (in der ersten Lektion zu Steuerelementen), daher verwenden wir hier eine einfache Lösung.
Standardmäßig ist „Frau“ ausgewählt (Eigenschaft Value: True), d. h. wir prüfen die Adresse bei der Auswahl nicht.
Private Sub CommandButton_Close_Click() Unload Me End Sub
Private Sub UserForm_Initialize() 'Laden der Liste, wenn das Formular geöffnet ist For i = 1 To 252 'Generieren einer Liste von 252 Ländern aus dem Länderarbeitsblatt ComboBox_Country.AddItem Sheets("Country").Cells(i, 1) Next End Sub
Eine einfache Lösung wäre, einen Dialog anzuzeigen, wenn eines der Steuerelemente leer ist.
Private Sub CommandButton_Add_Click() If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then MsgBox "Form incomplete" Else 'Anleitung zur Kontakteingabe hier... End If End Sub
Aber um es etwas komplizierter zu machen, sollte jedes Element separat überprüft werden, und wenn eines davon leer ist, sollte sich die Farbe seines Namens () in Rot ändern:
Private Sub CommandButton_Add_Click() 'Stellen Sie die Titelfarbe auf Schwarz ein Label_Last_Name.ForeColor = RGB(0, 0, 0) Label_First_Name.ForeColor = RGB(0, 0, 0) Label_Address.ForeColor = RGB(0, 0, 0) Label_Place.ForeColor = RGB(0, 0, 0) Label_Country.ForeColor = RGB(0, 0, 0) 'Inhaltskontrollen If TextBox_Last_Name.Value = "" Then 'WENN nichts angegeben ist... Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Stellen Sie die Titelfarbe auf Rot ein ElseIf TextBox_First_Name.Value = "" Then Label_First_Name.ForeColor = RGB(255, 0, 0) ElseIf TextBox_Address.Value = "" Then Label_Address.ForeColor = RGB(255, 0, 0) ElseIf TextBox_Place.Value = "" Then Label_Place.ForeColor = RGB(255, 0, 0) ElseIf ComboBox_Country.Value = "" Then Label_Country.ForeColor = RGB(255, 0, 0) Else 'Anleitung zur Kontakteingabe hier... End If End Sub
Der folgende Code sollte an der im obigen Code angegebenen Stelle eingefügt werden (siehe Kommentare):
Dim row_number As Integer, salutation As String 'Auswahl der Berufung For Each salutation_button In Frame_Salutation.Controls If salutation_button.Value Then salutation = salutation_button.Caption 'Einspruch ausgewählt End If Next 'row_number = Zeilennummer der letzten nicht leeren Zelle in Spalte +1 row_number = Range("A65536").End(xlUp).Row + 1 'Werte in ein Arbeitsblatt einfügen Cells(row_number, 1) = salutation Cells(row_number, 2) = TextBox_Last_Name.Value Cells(row_number, 3) = TextBox_First_Name.Value Cells(row_number, 4) = TextBox_Address.Value Cells(row_number, 5) = TextBox_Place.Value Cells(row_number, 6) = ComboBox_Country.Value 'Nach dem Einfügen werden die Originalwerte zurückgegeben OptionButton1.Value = True TextBox_Last_Name.Value = "" TextBox_First_Name.Value = "" TextBox_Address.Value = "" TextBox_Place.Value = "" ComboBox_Country.ListIndex = -1
Das war's, hier haben Sie den fertigen Code für die Übung und die Datei zum Herunterladen:
Private Sub CommandButton_Close_Click() Unload Me End Sub Private Sub UserForm_Initialize() 'Liste von 252 Ländern auf dem Blatt „Land“. For i = 1 To 252 ComboBox_Country.AddItem Sheets("Country").Cells(i, 1) Next End Sub Private Sub CommandButton_Add_Click() 'Stellen Sie die Namensfarbe auf Schwarz ein Label_Last_Name.ForeColor = RGB(0, 0, 0) Label_First_Name.ForeColor = RGB(0, 0, 0) Label_Address.ForeColor = RGB(0, 0, 0) Label_Place.ForeColor = RGB(0, 0, 0) Label_Country.ForeColor = RGB(0, 0, 0) 'Inhaltskontrollen If TextBox_Last_Name.Value = "" Then 'WENN nichts angegeben ist... Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Stellen Sie die Titelfarbe auf Rot ein ElseIf TextBox_First_Name.Value = "" Then Label_First_Name.ForeColor = RGB(255, 0, 0) ElseIf TextBox_Address.Value = "" Then Label_Address.ForeColor = RGB(255, 0, 0) ElseIf TextBox_Place.Value = "" Then Label_Place.ForeColor = RGB(255, 0, 0) ElseIf ComboBox_Country.Value = "" Then Label_Country.ForeColor = RGB(255, 0, 0) Else 'Wenn das Formular ausgefüllt ist, werden die Werte in das Arbeitsblatt eingefügt Dim row_number As Integer, salutation As String 'Auswahl der Berufung For Each salutation_button In Frame_Salutation.Controls If salutation_button.Value Then salutation = salutation_button.Caption End If Next 'row_number = Zeilennummer der letzten nicht leeren Zelle in Spalte +1 row_number = Range("A65536").End(xlUp).Row + 1 'Werte in ein Arbeitsblatt einfügen Cells(row_number, 1) = salutation Cells(row_number, 2) = TextBox_Last_Name.Value Cells(row_number, 3) = TextBox_First_Name.Value Cells(row_number, 4) = TextBox_Address.Value Cells(row_number, 5) = TextBox_Place.Value Cells(row_number, 6) = ComboBox_Country.Value 'Nach dem Einfügen der Daten geben wir die Anfangswerte zurück OptionButton1.Value = True TextBox_Last_Name.Value = "" TextBox_First_Name.Value = "" TextBox_Address.Value = "" TextBox_Place.Value = "" ComboBox_Country.ListIndex = -1 End If End Sub
Hier ist die Excel-Datei zum Herunterladen: controls_exercise2.xls