Now let's look at a small exercise to practice using the controls.
There is a file with a ready-made form and control elements. We need to write code that would make all the elements work so that the user can populate our improvised database through interaction with the form.
Here is the Excel file for download: controls_exercise.xls
Now it should be clear that the goal here is to populate the table using the form.
A few points to consider:
First, we need to increase the Zoom property of our form to 120 to make it easier to use:
We've already covered checking option buttons (in the first lesson on controls), so here we use a simple solution.
"Mrs" is selected by default (Value property: True), that is, we will not check the address when selecting it.
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Loading the list when the form is open
For i = 1 To 252 'Formation of a list of 252 countries from the worksheet "Country"
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
It would be a simple solution to display a dialog if any of the controls are empty.
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
'Instructions for entering a contact here...
End If
End Sub
But to make it a bit more complicated, each element should be checked individually, and if any of them is empty, its name() should change color to red:
Private Sub CommandButton_Add_Click()
'Setting the name color to black
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)
'Content controls
If TextBox_Last_Name.Value = "" Then 'IF nothing specified...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Set name color to red
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
'Instructions for entering a contact here...
End If
End Sub
The following code should be inserted in the place indicated in the code above (see comments):
Dim row_number As Integer, salutation As String
"Selection of appeal
For Each salutation_button In Frame_Salutation.Controls
If greeting_button.Value Then
salutation = salutation_button.Caption 'Salutation selected
End If
Next
'row_number = row number of the last non-empty cell in column +1
row_number = Range("A65536").End(xlUp).Row + 1
'Inserting values into a worksheet
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
'After insertion, the initial values are returned
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
That's it, here you have the completed code for the exercise and the file to download:
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'List of 252 countries on sheet "Country"
For i = 1 To 252
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Private Sub CommandButton_Add_Click()
'Setting the name color to black
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)
'Content controls
If TextBox_Last_Name.Value = "" Then 'IF nothing specified...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Set name color to red
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
'If the form is filled, the values will be pasted into the worksheet
Dim row_number As Integer, salutation As String
"Selection of appeal
For Each salutation_button In Frame_Salutation.Controls
If greeting_button.Value Then
salutation = salutation_button.Caption
End If
Next
'row_number = row number of the last non-empty cell in column +1
row_number = Range("A65536").End(xlUp).Row + 1
'Inserting values on the worksheet
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
After inserting the data, we return the initial values
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
Here is the Excel file for download: controls_exercise2.xls