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“.

    1. Private Sub CommandButton_Close_Click()  
    2.      Unload Me  
    3. End Sub  

    Der Inhalt der Dropdown-Liste

    1. Private Sub UserForm_Initialize() 'Laden der Liste, wenn das Formular geöffnet ist  
    2.     For i = 1 To 252 'Generieren einer Liste von 252 Ländern aus dem Länderarbeitsblatt  
    3.        ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)  
    4.     Next  
    5. End Sub  

    Kontrolle der Bedienelemente

    Eine einfache Lösung wäre, einen Dialog anzuzeigen, wenn eines der Steuerelemente leer ist.

    1. Private Sub CommandButton_Add_Click()  
    2.      If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then  
    3.          MsgBox "Form incomplete"  
    4.      Else  
    5.          'Anleitung zur Kontakteingabe hier...  
    6.      End If  
    7. 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:

    1. Private Sub CommandButton_Add_Click()  
    2.      'Stellen Sie die Titelfarbe auf Schwarz ein  
    3.      Label_Last_Name.ForeColor  = RGB(0, 0, 0)  
    4.      Label_First_Name.ForeColor = RGB(0, 0, 0)  
    5.      Label_Address.ForeColor    = RGB(0, 0, 0)  
    6.      Label_Place.ForeColor      = RGB(0, 0, 0)  
    7.      Label_Country.ForeColor    = RGB(0, 0, 0)  
    8.   
    9.      'Inhaltskontrollen  
    10.      If TextBox_Last_Name.Value = "" Then 'WENN nichts angegeben ist...  
    11.          Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Stellen Sie die Titelfarbe auf Rot ein  
    12.      ElseIf TextBox_First_Name.Value = "" Then  
    13.          Label_First_Name.ForeColor = RGB(255, 0, 0)  
    14.      ElseIf TextBox_Address.Value = "" Then  
    15.          Label_Address.ForeColor = RGB(255, 0, 0)  
    16.      ElseIf TextBox_Place.Value = "" Then  
    17.          Label_Place.ForeColor = RGB(255, 0, 0)  
    18.      ElseIf ComboBox_Country.Value = "" Then  
    19.          Label_Country.ForeColor = RGB(255, 0, 0)  
    20.      Else  
    21.          'Anleitung zur Kontakteingabe hier...  
    22.      End If  
    23. End Sub  

    Daten einfügen

    Der folgende Code sollte an der im obigen Code angegebenen Stelle eingefügt werden (siehe Kommentare):

    1. Dim row_number As Integer, salutation As String  
    2.   
    3. 'Auswahl der Berufung  
    4. For Each salutation_button In Frame_Salutation.Controls  
    5.     If salutation_button.Value Then  
    6.         salutation = salutation_button.Caption 'Einspruch ausgewählt  
    7.     End If  
    8. Next  
    9.   
    10. 'row_number = Zeilennummer der letzten nicht leeren Zelle in Spalte +1  
    11. row_number = Range("A65536").End(xlUp).Row + 1  
    12.   
    13. 'Werte in ein Arbeitsblatt einfügen  
    14. Cells(row_number, 1) = salutation  
    15. Cells(row_number, 2) = TextBox_Last_Name.Value  
    16. Cells(row_number, 3) = TextBox_First_Name.Value  
    17. Cells(row_number, 4) = TextBox_Address.Value  
    18. Cells(row_number, 5) = TextBox_Place.Value  
    19. Cells(row_number, 6) = ComboBox_Country.Value  
    20.   
    21. 'Nach dem Einfügen werden die Originalwerte zurückgegeben  
    22. OptionButton1.Value = True  
    23. TextBox_Last_Name.Value  = ""  
    24. TextBox_First_Name.Value = ""  
    25. TextBox_Address.Value    = ""  
    26. TextBox_Place.Value      = ""  
    27. ComboBox_Country.ListIndex = -1  

    Gesamterscheinung

    Das war's, hier haben Sie den fertigen Code für die Übung und die Datei zum Herunterladen:

    1. Private Sub CommandButton_Close_Click()  
    2.      Unload Me  
    3. End Sub  
    4.   
    5. Private Sub UserForm_Initialize() 'Liste von 252 Ländern auf dem Blatt „Land“.  
    6.     For i = 1 To 252  
    7.         ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)  
    8.     Next  
    9. End Sub  
    10.   
    11. Private Sub CommandButton_Add_Click()  
    12.      'Stellen Sie die Namensfarbe auf Schwarz ein  
    13.      Label_Last_Name.ForeColor  = RGB(0, 0, 0)  
    14.      Label_First_Name.ForeColor = RGB(0, 0, 0)  
    15.      Label_Address.ForeColor    = RGB(0, 0, 0)  
    16.      Label_Place.ForeColor      = RGB(0, 0, 0)  
    17.      Label_Country.ForeColor    = RGB(0, 0, 0)  
    18.   
    19.      'Inhaltskontrollen  
    20.      If TextBox_Last_Name.Value = "" Then 'WENN nichts angegeben ist...  
    21.          Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Stellen Sie die Titelfarbe auf Rot ein  
    22.      ElseIf TextBox_First_Name.Value = "" Then  
    23.          Label_First_Name.ForeColor = RGB(255, 0, 0)  
    24.      ElseIf TextBox_Address.Value = "" Then  
    25.          Label_Address.ForeColor = RGB(255, 0, 0)  
    26.      ElseIf TextBox_Place.Value = "" Then  
    27.          Label_Place.ForeColor = RGB(255, 0, 0)  
    28.      ElseIf ComboBox_Country.Value = "" Then  
    29.          Label_Country.ForeColor = RGB(255, 0, 0)  
    30.      Else  
    31.          'Wenn das Formular ausgefüllt ist, werden die Werte in das Arbeitsblatt eingefügt  
    32.          Dim row_number As Integer, salutation As String  
    33.            
    34.          'Auswahl der Berufung  
    35.          For Each salutation_button In Frame_Salutation.Controls  
    36.              If salutation_button.Value Then  
    37.                  salutation = salutation_button.Caption  
    38.              End If  
    39.          Next  
    40.   
    41.          'row_number = Zeilennummer der letzten nicht leeren Zelle in Spalte +1  
    42.          row_number = Range("A65536").End(xlUp).Row + 1  
    43.   
    44.          'Werte in ein Arbeitsblatt einfügen  
    45.          Cells(row_number, 1) = salutation  
    46.          Cells(row_number, 2) = TextBox_Last_Name.Value  
    47.          Cells(row_number, 3) = TextBox_First_Name.Value  
    48.          Cells(row_number, 4) = TextBox_Address.Value  
    49.          Cells(row_number, 5) = TextBox_Place.Value  
    50.          Cells(row_number, 6) = ComboBox_Country.Value  
    51.            
    52.          'Nach dem Einfügen der Daten geben wir die Anfangswerte zurück  
    53.          OptionButton1.Value = True  
    54.          TextBox_Last_Name.Value  = ""  
    55.          TextBox_First_Name.Value = ""  
    56.          TextBox_Address.Value    = ""  
    57.          TextBox_Place.Value      = ""  
    58.          ComboBox_Country.ListIndex = -1  
    59.      End If  
    60. End Sub  

    Hier ist die Excel-Datei zum Herunterladen: controls_exercise2.xls