TOP

VBA-Lecția 12.4. Elemente de control (exerciții)

YouLibreCalc for Excel logo

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:

  • Lista țărilor se bazează pe lista de pe a doua foaie;
  • Verificarea valorilor elementelor de control înainte de a adăuga un nou contact;
  • După introducerea valorilor, returnarea valorilor inițiale ale controalelor fără a închide formularul.
  • Una dintre modalitățile de a rezolva problema

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

    Butonul de închidere

    Private Sub CommandButton_Close_Click()
         Unload Me
    End Sub
    

    Conținutul listei derulante

    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
    

    Verificarea elementelor de control

    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
    

    Inserarea datelor

    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
    

    Aspectul general

    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