Давайте зараз розглянемо невелику вправу, щоби попрактикуватись у використанні елементів управління (Controls).
Є файл з готовою формою та елементами управління. Потрібно написати код, який би заставив запрацювати всі елементи таким чином, щоби користувач міг наповнювати нашу імпровізовану базу даних через взаємодію з формою.
Ось файл Excel для завантаження: controls_exercise.xls
Тепер має бути ясно, що мета тут полягає у заповненні таблиці, використовуючи форму.
Кілька моментів, які потрібно взяти до уваги:
Спочатку, нам необхідно збільшити властивість Zoom нашої форми до 120, щоби зробити її легшою у використанні:
Ми вже розглянули перевірку кнопок вибору опцій (option button) (на першому уроці по елементам управління), отож тут ми використовюємо просте рішення.
"Mrs" вибираємо по замовчуванню (властивість Value: True), тобто ми не будемо перевіряти звертання при його виборі.
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Завантаження списку, коли форма відкрита
For i = 1 To 252 'Формування списку з 252 країн із робочого аркуша "Country"
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Було б простим рішенням відобразити діалогове вікно, якщо будь-який з елементів управління є порожнім.
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
'Інструкції для внесення контакту тут...
End If
End Sub
Але, щоби зробити трохи складніше, кожен елемент потрібно перевіряти окремо, і якщо будь-який з них порожній, колір його назви () повинен змінюватися на червоний:
Private Sub CommandButton_Add_Click()
'Встановлення кольору назви в чорний
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 'ЯКЩО нічого не зазначено...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Встановити колір назви в червоний
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
'Інструкції для внесення контакту тут...
End If
End Sub
Наступний код має бути вставлений в місце, зазначене в коді вище (див. коментарі):
Dim row_number As Integer, salutation As String
'Вибір звернення
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption 'Звернення вибрано
End If
Next
'row_number = номер рядка останньої непорожньої клітинки в стовпці +1
row_number = Range("A65536").End(xlUp).Row + 1
'Вставлення значень в робочий лист
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
'Після вставлення, початкові значення повертаються
OptionButton1.Value = True
TextBox_Last_Name.Value = ""
TextBox_First_Name.Value = ""
TextBox_Address.Value = ""
TextBox_Place.Value = ""
ComboBox_Country.ListIndex = -1
Це все, тут ви маєте завершений код для вправи і файл для завантаження:
Private Sub CommandButton_Close_Click()
Unload Me
End Sub
Private Sub UserForm_Initialize() 'Список з 252 країн на аркуші "Country"
For i = 1 To 252
ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)
Next
End Sub
Private Sub CommandButton_Add_Click()
'Встановлення кольору назви на чорний
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)
'Елементи керуванням вмістом
If TextBox_Last_Name.Value = "" Then 'ЯКЩО нічого не зазначено...
Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Встановити колір назви в червоний
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
'Якщо форма заповнена, значення будуть вставлені на робочий аркуш
Dim row_number As Integer, salutation As String
'Вибір звернення
For Each salutation_button In Frame_Salutation.Controls
If salutation_button.Value Then
salutation = salutation_button.Caption
End If
Next
'row_number = номер рядка останньої непорожньої комірки в стовпці +1
row_number = Range("A65536").End(xlUp).Row + 1
'Вставлення значень на робочий аркуш
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
'Після вставлення даних, повертаємо початкові значення
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
Тут є Excel файл для завантаження: controls_exercise2.xls