Давайте зараз розглянемо невелику вправу, щоби попрактикуватись у використанні елементів управління (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