Să ne uităm acum la un mic exercițiu pentru a exersa utilizarea controalelor (Controls).
Există un fișier cu un formular gata făcut și elemente de control. Trebuie să scriem cod care să facă toate elementele să funcționeze, astfel încât utilizatorul să poată popula baza noastră de date improvizată prin interacțiunea cu formularul.
Iată fișierul Excel de descărcat: controls_exercise.xls
Acum ar trebui să fie clar că scopul aici este de a popula tabelul folosind formularul.
Câteva puncte de luat în considerare:
În primul rând, trebuie să creștem proprietatea Zoom a formularului nostru la 120 pentru a fi mai ușor de utilizat:
Am abordat deja verificarea butoanelor de opțiuni (în prima lecție despre controale), așa că aici folosim o soluție simplă.
„Mrs” este selectat implicit (proprietatea Value: True), adică nu vom verifica adresa atunci când o selectăm.
Private Sub CommandButton_Close_Click() Unload Me End Sub
Private Sub UserForm_Initialize() 'Se încarcă lista când formularul este deschis For i = 1 To 252 'Generarea unei liste de 252 de țări din foaia de lucru Țară ComboBox_Country.AddItem Sheets("Country").Cells(i, 1) Next End Sub
O soluție simplă ar fi afișarea unui dialog dacă oricare dintre controale este goală.
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 'Instrucțiuni pentru introducerea unui contact aici... End If End Sub
Dar pentru a face un pic mai complicat, fiecare element ar trebui verificat separat, iar dacă oricare dintre ele este gol, culoarea numelui său () ar trebui să se schimbe în roșu:
Private Sub CommandButton_Add_Click() 'Setați culoarea numelui la negru 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) 'Controale de conținut If TextBox_Last_Name.Value = "" Then 'DACA nu este specificat nimic... Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Setați culoarea titlului la roșu 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 'Instrucțiuni pentru introducerea unui contact aici... End If End Sub
Următorul cod trebuie introdus în locul indicat în codul de mai sus (vezi comentarii):
Dim row_number As Integer, salutation As String 'Alegerea recursului For Each salutation_button In Frame_Salutation.Controls If salutation_button.Value Then salutation = salutation_button.Caption 'Apel selectat End If Next 'row_number = numărul rândului ultimei celule nevide din coloana +1 row_number = Range("A65536").End(xlUp).Row + 1 'Inserarea valorilor într-o foaie de lucru 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 'După lipire, valorile originale sunt returnate OptionButton1.Value = True TextBox_Last_Name.Value = "" TextBox_First_Name.Value = "" TextBox_Address.Value = "" TextBox_Place.Value = "" ComboBox_Country.ListIndex = -1
Gata, aici ai codul completat pentru exercițiu și fișierul de descărcat:
Private Sub CommandButton_Close_Click() Unload Me End Sub Private Sub UserForm_Initialize() 'Lista celor 252 de țări de pe foaia „Țară”. For i = 1 To 252 ComboBox_Country.AddItem Sheets("Country").Cells(i, 1) Next End Sub Private Sub CommandButton_Add_Click() 'Setați culoarea numelui la negru 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) 'Controale de conținut If TextBox_Last_Name.Value = "" Then 'DACA nu este specificat nimic... Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Setați culoarea titlului la roșu 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 'Dacă formularul este completat, valorile vor fi lipite în foaia de lucru Dim row_number As Integer, salutation As String 'Alegerea recursului For Each salutation_button In Frame_Salutation.Controls If salutation_button.Value Then salutation = salutation_button.Caption End If Next 'row_number = numărul rândului ultimei celule nevide din coloana +1 row_number = Range("A65536").End(xlUp).Row + 1 'Inserarea valorilor într-o foaie de lucru 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 'După introducerea datelor, returnăm valorile inițiale 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
Iată fișierul Excel pentru descărcare: controls_exercise2.xls