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