Przyjrzyjmy się teraz małemu ćwiczeniu ćwiczącemu korzystanie z elementów sterujących (Controls).
Znajduje się w nim plik z gotowym formularzem i elementami sterującymi. Musimy napisać kod, który sprawi, że wszystkie elementy będą działać tak, aby użytkownik mógł zapełnić naszą zaimprowizowaną bazę danych poprzez interakcję z formularzem.
Oto plik Excel do pobrania: controls_exercise.xls
Powinno być teraz jasne, że celem jest wypełnienie tabeli za pomocą formularza.
Kilka punktów do rozważenia:
Najpierw musimy zwiększyć właściwość Zoom naszego formularza do 120, aby ułatwić korzystanie z niego:
Sprawdzanie przycisków opcji omówiliśmy już (w pierwszej lekcji o sterowaniu), więc tutaj zastosujemy proste rozwiązanie.
Domyślnie wybrana jest „Pani” (właściwość Value: True), czyli przy jej wyborze nie sprawdzimy adresu.
Private Sub CommandButton_Close_Click() Unload Me End Sub
Private Sub UserForm_Initialize() 'Ładowanie listy przy otwartym formularzu For i = 1 To 252 'Generowanie listy 252 krajów z arkusza Kraj ComboBox_Country.AddItem Sheets("Country").Cells(i, 1) Next End Sub
Prostym rozwiązaniem byłoby wyświetlenie okna dialogowego, jeśli którakolwiek z kontrolek jest pusta.
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 'Instrukcje dotyczące wprowadzania kontaktu tutaj... End If End Sub
Ale żeby było trochę bardziej skomplikowanie, każdy element należy sprawdzić osobno i jeśli któryś z nich jest pusty, kolor jego nazwy () powinien zmienić się na czerwony:
Private Sub CommandButton_Add_Click() 'Ustaw kolor tytułu na czarny 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) 'Kontrola treści If TextBox_Last_Name.Value = "" Then 'JEŚLI nic nie jest określone... Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Ustaw kolor tytułu na czerwony 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 'Instrukcje dotyczące wprowadzania kontaktu tutaj... End If End Sub
W miejscu wskazanym w kodzie powyżej należy wstawić następujący kod (patrz uwagi):
Dim row_number As Integer, salutation As String 'Wybór odwołania For Each salutation_button In Frame_Salutation.Controls If salutation_button.Value Then salutation = salutation_button.Caption 'Wybrano odwołanie End If Next 'row_number = numer wiersza ostatniej niepustej komórki w kolumnie +1 row_number = Range("A65536").End(xlUp).Row + 1 'Wstawianie wartości do arkusza 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 'Po wklejeniu zwracane są oryginalne wartości OptionButton1.Value = True TextBox_Last_Name.Value = "" TextBox_First_Name.Value = "" TextBox_Address.Value = "" TextBox_Place.Value = "" ComboBox_Country.ListIndex = -1
To wszystko, tutaj masz kompletny kod ćwiczenia i plik do pobrania:
Private Sub CommandButton_Close_Click() Unload Me End Sub Private Sub UserForm_Initialize() 'Lista 252 krajów w arkuszu „Kraj”. For i = 1 To 252 ComboBox_Country.AddItem Sheets("Country").Cells(i, 1) Next End Sub Private Sub CommandButton_Add_Click() 'Ustaw kolor nazwy na czarny 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) 'Kontrola treści If TextBox_Last_Name.Value = "" Then 'JEŚLI nic nie jest określone... Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Ustaw kolor tytułu na czerwony 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 'Jeśli formularz zostanie wypełniony, wartości zostaną wklejone do arkusza Dim row_number As Integer, salutation As String 'Wybór odwołania For Each salutation_button In Frame_Salutation.Controls If salutation_button.Value Then salutation = salutation_button.Caption End If Next 'row_number = numer wiersza ostatniej niepustej komórki w kolumnie +1 row_number = Range("A65536").End(xlUp).Row + 1 'Wstawianie wartości do arkusza 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 'Po wstawieniu danych zwracamy wartości początkowe 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
Oto plik Excel do pobrania: controls_exercise2.xls