VBA-Урок 12.4. Елементи управління (Вправи)

Давайте зараз розглянемо невелику вправу, щоби попрактикуватись у використанні елементів управління.

Є файл з готовою формою та елементами управління. Потрібно написати код, який би заставив запрацювати всі елементи таким чином, щоби користувач міг наповнювати нашу імпровізовану базу даних через взаємодію з формою.

Тут є Excel файл для завантаження: controls_exercise.xls

Тепер має бути ясно, що мета тут полягає у заповненні таблиці, використовуючи форму.

Кілька моментів, які потрібно взяти до уваги:

Один із способів розв'язання задачі

Спочатку, нам необхідно збільшити властивість Zoom нашої форми до 120, щоби зробити її легшою у використанні:

Ми вже розглянули перевірку кнопок вибору опцій (option button) (на першому уроці по елементам управління), отож тут ми використовюємо просте рішення.

"Mrs" вибираємо по замовчуванню (властивість Value: True), тобто ми не будемо перевіряти звертання при його виборі.

Кнопка закриття (Close)

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

Статті по темі:

  • VBA-Урок 12.3. Елементи управління (Controls)
  • VBA-Урок 13.1. Використання масивів (Arrays)