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)