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
    

    Der Inhalt der Dropdown-Liste

    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
             '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
    

    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
    
     '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() '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