Давайте теперь рассмотрим небольшое упражнение, чтобы попрактиковаться в использовании элементов управления.
Есть файл с готовой формой и элементами управления. Нужно написать код, который бы заставил заработать все элементы таким образом, чтобы пользователь мог наполнять нашу импровизированную базу данных через взаимодействие с формой.
Здесь есть 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