VBA - пользовательские формы

А User Form- это настраиваемое диалоговое окно, которое делает ввод данных пользователя более управляемым и более простым в использовании для пользователя. В этой главе вы научитесь создавать простую форму и добавлять данные в Excel.

Step 1- Перейдите в окно VBA, нажав Alt + F11, перейдите в меню «Вставить» и выберите «Форма пользователя». После выбора отображается форма пользователя, как показано на следующем снимке экрана.

Step 2 - Создавайте формы, используя данные элементы управления.

Step 3- После добавления каждого элемента управления необходимо дать ему имя. Заголовок соответствует тому, что отображается в форме, а имя соответствует логическому имени, которое будет отображаться при написании кода VBA для этого элемента.

Step 4 - Ниже приведены имена для каждого из добавленных элементов управления.

Контроль Логическое имя Заголовок
Из frmempform Форма сотрудника
Поле для ярлыка идентификатора сотрудника эмпид ID сотрудника
Поле с ярлыком имени Имя Имя
поле с меткой фамилии фамилия Фамилия
dob Label Box доб Дата рождения
mailid Label Box почтовый идентификатор Электронный идентификатор
Коробка с этикеткой для паспорта Владелец паспорта Владелец паспорта
Текстовое поле Emp ID txtempid Непригодный
Текстовое поле имени txtfirstname Непригодный
Текстовое поле фамилии txtlastname Непригодный
Текстовое поле идентификатора электронной почты txtemailid Непригодный
Поле со списком даты cmbdate Непригодный
Поле со списком "Месяц" куб.мес. Непригодный
Поле со списком "Год" cmbyear Непригодный
Да Радиокнопка радио да да
Нет радиокнопки радионо Нет
Отправить кнопку btnsubmit Разместить
Кнопка отмены btncancel отменить

Step 5 - Добавьте код для события загрузки формы, щелкнув форму правой кнопкой мыши и выбрав «Просмотреть код».

Step 6 - Выберите «Userform» из раскрывающегося списка объектов и выберите метод «Initialize», как показано на следующем снимке экрана.

Step 7 - После загрузки формы убедитесь, что текстовые поля очищены, раскрывающиеся поля заполнены, а переключатели сброшены.

Private Sub UserForm_Initialize()
   'Empty Emp ID Text box and Set the Cursor 
   txtempid.Value = ""
   txtempid.SetFocus
   
   'Empty all other text box fields
   txtfirstname.Value = ""
   txtlastname.Value = ""
   txtemailid.Value = ""
   
   'Clear All Date of Birth Related Fields
   cmbdate.Clear
   cmbmonth.Clear
   cmbyear.Clear
   
   'Fill Date Drop Down box - Takes 1 to 31
   With cmbdate
      .AddItem "1"
      .AddItem "2"
      .AddItem "3"
      .AddItem "4"
      .AddItem "5"
      .AddItem "6"
      .AddItem "7"
      .AddItem "8"
      .AddItem "9"
      .AddItem "10"
      .AddItem "11"
      .AddItem "12"
      .AddItem "13"
      .AddItem "14"
      .AddItem "15"
      .AddItem "16"
      .AddItem "17"
      .AddItem "18"
      .AddItem "19"
      .AddItem "20"
      .AddItem "21"
      .AddItem "22"
      .AddItem "23"
      .AddItem "24"
      .AddItem "25"
      .AddItem "26"
      .AddItem "27"
      .AddItem "28"
      .AddItem "29"
      .AddItem "30"
      .AddItem "31"
   End With
   
   'Fill Month Drop Down box - Takes Jan to Dec
   With cmbmonth
      .AddItem "JAN"
      .AddItem "FEB"
      .AddItem "MAR"
      .AddItem "APR"
      .AddItem "MAY"
      .AddItem "JUN"
      .AddItem "JUL"
      .AddItem "AUG"
      .AddItem "SEP"
      .AddItem "OCT"
      .AddItem "NOV"
      .AddItem "DEC"
   End With
   
   'Fill Year Drop Down box - Takes 1980 to 2014
   With cmbyear
      .AddItem "1980"
      .AddItem "1981"
      .AddItem "1982"
      .AddItem "1983"
      .AddItem "1984"
      .AddItem "1985"
      .AddItem "1986"
      .AddItem "1987"
      .AddItem "1988"
      .AddItem "1989"
      .AddItem "1990"
      .AddItem "1991"
      .AddItem "1992"
      .AddItem "1993"
      .AddItem "1994"
      .AddItem "1995"
      .AddItem "1996"
      .AddItem "1997"
      .AddItem "1998"
      .AddItem "1999"
      .AddItem "2000"
      .AddItem "2001"
      .AddItem "2002"
      .AddItem "2003"
      .AddItem "2004"
      .AddItem "2005"
      .AddItem "2006"
      .AddItem "2007"
      .AddItem "2008"
      .AddItem "2009"
      .AddItem "2010"
      .AddItem "2011"
      .AddItem "2012"
      .AddItem "2013"
      .AddItem "2014"
   End With
   
   'Reset Radio Button. Set it to False when form loads.
   radioyes.Value = False
   radiono.Value = False

End Sub

Step 8- Теперь добавьте код на кнопку «Отправить». После нажатия кнопки отправки пользователь сможет добавить значения в рабочий лист.

Private Sub btnsubmit_Click()
   Dim emptyRow As Long
  
   'Make Sheet1 active
   Sheet1.Activate
  
   'Determine emptyRow
   emptyRow = WorksheetFunction.CountA(Range("A:A")) + 1
  
   'Transfer information
   Cells(emptyRow, 1).Value = txtempid.Value
   Cells(emptyRow, 2).Value = txtfirstname.Value
   Cells(emptyRow, 3).Value = txtlastname.Value
   Cells(emptyRow, 4).Value = cmbdate.Value & "/" & cmbmonth.Value & "/" & cmbyear.Value
   Cells(emptyRow, 5).Value = txtemailid.Value
  
   If radioyes.Value = True Then
      Cells(emptyRow, 6).Value = "Yes"
   Else
      Cells(emptyRow, 6).Value = "No"
   End If
End Sub

Step 9 - Добавить метод закрытия формы, когда пользователь нажимает кнопку «Отмена».

Private Sub btncancel_Click()
   Unload Me
End Sub

Step 10- Запустите форму, нажав кнопку «Выполнить». Введите значения в форму и нажмите кнопку «Отправить». Значения автоматически переместятся в рабочий лист, как показано на следующем снимке экрана.