TOP
VBA-Lektion 12.4. Kontrollelemente (Übungen)
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:
Die Liste der Länder basiert auf der Liste auf dem zweiten Blatt;
Überprüfen der Werte der Steuerelemente vor dem Hinzufügen eines neuen Kontakts;
Nach der Eingabe der Werte werden die Anfangswerte der Steuerelemente zurückgegeben, ohne das Formular zu schließen.
Eine Möglichkeit, das Problem zu lösen
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.
Schaltfläche „Schließen“.
- Private Sub CommandButton_Close_Click()
- Unload Me
- End Sub
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Der Inhalt der Dropdown-Liste
- Private Sub UserForm_Initialize()
- For i = 1 To 252
- ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
- Next
- 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
Kontrolle der Bedienelemente
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
-
- End If
- End Sub
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()
-
- 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)
-
-
- If TextBox_Last_Name.Value = "" Then
- Label_Last_Name.ForeColor = RGB(255, 0, 0)
- 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
-
- End If
- End Sub
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
Daten einfügen
Der folgende Code sollte an der im obigen Code angegebenen Stelle eingefügt werden (siehe Kommentare):
- Dim row_number As Integer, salutation As String
-
-
- For Each salutation_button In Frame_Salutation.Controls
- If salutation_button.Value Then
- salutation = salutation_button.Caption
- End If
- Next
-
-
- row_number = Range("A65536").End(xlUp).Row + 1
-
-
- 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
-
-
- OptionButton1.Value = True
- TextBox_Last_Name.Value = ""
- TextBox_First_Name.Value = ""
- TextBox_Address.Value = ""
- TextBox_Place.Value = ""
- ComboBox_Country.ListIndex = -1
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
Gesamterscheinung
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()
- For i = 1 To 252
- ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
- Next
- End Sub
-
- Private Sub CommandButton_Add_Click()
-
- 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)
-
-
- If TextBox_Last_Name.Value = "" Then
- Label_Last_Name.ForeColor = RGB(255, 0, 0)
- 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
-
- Dim row_number As Integer, salutation As String
-
-
- For Each salutation_button In Frame_Salutation.Controls
- If salutation_button.Value Then
- salutation = salutation_button.Caption
- End If
- Next
-
-
- row_number = Range("A65536").End(xlUp).Row + 1
-
-
- 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
-
-
- 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
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