TOP

VBA-Урок 12.4. Элементы управления (Упражнения)

Давайте теперь рассмотрим небольшое упражнение, чтобы попрактиковаться в использовании элементов управления.

Есть файл с готовой формой и элементами управления. Нужно написать код, который бы заставил заработать все элементы таким образом, чтобы пользователь мог наполнять нашу импровизированную базу данных через взаимодействие с формой.

Здесь есть Excel файл для загрузки: controls_exercise.xls

Теперь должно быть ясно, что цель здесь заключается в заполнении таблицы, используя форму.

Несколько моментов, которые нужно принять во внимание:

Один из способов решения задачи

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

Мы уже рассмотрели проверку кнопок выбора опций (option button) (на первом уроке по элементам управления), поэтому здесь мы используем простое решение.

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

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

  1. Private Sub CommandButton_Close_Click()  
  2.      Unload Me  
  3. End Sub  

Содержание выпадающего списка

  1. Private Sub UserForm_Initialize () 'Загрузка списка, когда форма открыта  
  2.      For i = 1 To 252 'Формирование списка из 252 стран с рабочего листа "Country"  
  3.         ComboBox_Country.AddItem Sheets ("Country"). Cells (i, 1)  
  4.      Next  
  5. End Sub  

Проверка элементов управления

Было бы простым решением открыть диалоговое окно, если любой из элементов управления является пустым.

  1. Private Sub CommandButton_Add_Click()  
  2.      If TextBox_Last_Name.Value = "" Or TextBox_First_Name.Value = "" Or TextBox_Address.Value = "" Or TextBox_Place.Value = "" Or ComboBox_Country.Value = "" Then  
  3.          MsgBox "Form incomplete"  
  4.      Else  
  5.          'Инструкции для внесения контакта здесь...  
  6.      End If  
  7. End Sub  

Но, чтобы сделать немного сложнее, каждый элемент нужно проверять отдельно, и если любой из них пустой, цвет его названия () должен меняться на красный:

  1. Private Sub CommandButton_Add_Click()  
  2.      'Установка цвета названия в черный  
  3.      Label_Last_Name.ForeColor = RGB(0, 0, 0)  
  4.      Label_First_Name.ForeColor = RGB(0, 0, 0)  
  5.      Label_Address.ForeColor = RGB(0, 0, 0)  
  6.      Label_Place.ForeColor = RGB(0, 0, 0)  
  7.      Label_Country.ForeColor = RGB(0, 0, 0)  
  8.   
  9.      'Content controls  
  10.      If TextBox_Last_Name.Value = "" Then 'ЕСЛИ ничего не указано...  
  11.          Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Установить цвет названия в красный  
  12.      ElseIf TextBox_First_Name.Value = "" Then  
  13.          Label_First_Name.ForeColor = RGB(255, 0, 0)  
  14.      ElseIf TextBox_Address.Value = "" Then  
  15.          Label_Address.ForeColor = RGB(255, 0, 0)  
  16.      ElseIf TextBox_Place.Value = "" Then  
  17.          Label_Place.ForeColor = RGB(255, 0, 0)  
  18.      ElseIf ComboBox_Country.Value = "" Then  
  19.          Label_Country.ForeColor = RGB(255, 0, 0)  
  20.      Else  
  21.          'Инструкции для внесения контакта здесь...  
  22.      End If  
  23. End Sub  

Установка данных

Следующий код должен быть вставлен в место, указанное в коде выше (см. комментарии):

  1. Dim row_number As Integer, salutation As String  
  2.   
  3. 'Выбор обращения  
  4. For Each salutation_button In Frame_Salutation.Controls  
  5.      If salutation_button.Value Then  
  6.          salutation = salutation_button.Caption 'Обращение выбрано  
  7.      End If  
  8. Next  
  9.   
  10. 'row_number = номер строки последней непустой ячейки в столбце +1  
  11. row_number = Range("A65536").End(xlUp).Row + 1  
  12.   
  13. 'Установка значений в рабочий лист  
  14. Cells(row_number, 1) = salutation  
  15.  Cells(row_number, 2) = TextBox_Last_Name.Value  
  16.  Cells(row_number, 3) = TextBox_First_Name.Value  
  17.  Cells(row_number, 4) = TextBox_Address.Value  
  18.  Cells(row_number, 5) = TextBox_Place.Value  
  19.  Cells(row_number, 6) = ComboBox_Country.Value  
  20.   
  21. 'После установки, начальные значения возвращаются  
  22. OptionButton1.Value = True  
  23.  TextBox_Last_Name.Value = ""  
  24.  TextBox_First_Name.Value = ""  
  25.  TextBox_Address.Value = ""  
  26.  TextBox_Place.Value = ""  
  27.  ComboBox_Country.ListIndex = -1  

Общий вид

Это все, здесь вы имеете завершенный код для упражнения и файл для загрузки:

  1. Private Sub CommandButton_Close_Click()  
  2.      Unload Me  
  3. End Sub  
  4.   
  5. Private Sub UserForm_Initialize() 'Список из 252 стран на листе "Country"  
  6.     For i = 1 To 252  
  7.         ComboBox_Country.AddItem Sheets("Country").Cells(i, 1)  
  8.     Next  
  9. End Sub  
  10.   
  11. Private Sub CommandButton_Add_Click()  
  12.      'Установка цвета названия черный  
  13.      Label_Last_Name.ForeColor = RGB(0, 0, 0)  
  14.      Label_First_Name.ForeColor = RGB(0, 0, 0)  
  15.      Label_Address.ForeColor = RGB(0, 0, 0)  
  16.      Label_Place.ForeColor = RGB(0, 0, 0)  
  17.      Label_Country.ForeColor = RGB(0, 0, 0)  
  18.   
  19.      'Элементы управлением содержанием  
  20.      If TextBox_Last_Name.Value = "" Then 'ЕСЛИ ничего не указано...  
  21.          Label_Last_Name.ForeColor = RGB(255, 0, 0) 'Установить цвет названия в красный  
  22.      ElseIf TextBox_First_Name.Value = "" Then  
  23.          Label_First_Name.ForeColor = RGB(255, 0, 0)  
  24.      ElseIf TextBox_Address.Value = "" Then  
  25.          Label_Address.ForeColor = RGB(255, 0, 0)  
  26.      ElseIf TextBox_Place.Value = "" Then  
  27.          Label_Place.ForeColor = RGB(255, 0, 0)  
  28.      ElseIf ComboBox_Country.Value = "" Then  
  29.          Label_Country.ForeColor = RGB(255, 0, 0)  
  30.      Else  
  31.          'Если форма заполнена, значения будут вставлены на рабочий лист  
  32.          Dim row_number As Integer, salutation As String  
  33.            
  34.          'Выбор обращения  
  35.          For Each salutation_button In Frame_Salutation.Controls  
  36.              If salutation_button.Value Then  
  37.                  salutation = salutation_button.Caption  
  38.              End If  
  39.          Next  
  40.   
  41.          'row_number = номер строки последней непустой ячейки в столбце +1  
  42.          row_number = Range("A65536").End(xlUp).Row + 1  
  43.   
  44.          'Установка значений на рабочий лист  
  45.          Cells(row_number, 1) = salutation  
  46.          Cells(row_number, 2) = TextBox_Last_Name.Value  
  47.          Cells(row_number, 3) = TextBox_First_Name.Value  
  48.          Cells(row_number, 4) = TextBox_Address.Value  
  49.          Cells(row_number, 5) = TextBox_Place.Value  
  50.          Cells(row_number, 6) = ComboBox_Country.Value  
  51.            
  52.          'После установки данных, возвращаем начальные значения  
  53.          OptionButton1.Value = True  
  54.          TextBox_Last_Name.Value = ""  
  55.          TextBox_First_Name.Value = ""  
  56.          TextBox_Address.Value = ""  
  57.          TextBox_Place.Value = ""  
  58.          ComboBox_Country.ListIndex = -1  
  59.      End If  
  60. End Sub  

Здесь есть Excel файл для загрузки: controls_exercise2.xls

Статьи по теме:

  • VBA-Урок 12.3. Элементы управления (Controls)
  • VBA-Урок 13.1. Использование массивов (Arrays)