Как создать автоматически сгенерированный текст в пользовательской форме на основе таблицы?

#excel #vba #vlookup

#excel #vba #ВПР

Вопрос:

Я создал таблицу1, которая использует пользовательскую форму для добавления новой строки, нажав кнопку (Добавить новую запись), то, что я хочу в UderForm как только я выберу имя из списка со списком (comboName), (txtDiscipline) будет автоматически сгенерирован (появится автоматически) на основе таблицы2, который указывает для каждого именидисциплина.

Таблица1 и таблица2

Пользовательская форма для добавления строк в таблицу1

Обновить:

Сообщение после закрытия пользовательской формы

Ответ №1:

Вы можете создать 2 подраздела в пользовательской форме и использовать метод поиска при изменении выпадающего списка. обратите внимание, что если у вас одинаковые имена в столбце F, это не сработает, и тогда вам нужно определить уникальный идентификатор для каждого элемента.

 Private Sub comboName_Change()
Dim int_LR As Integer: int_LR = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row '   find last row of table
Dim str_Name As String: str_Name = Me.comboName                                 '   look up this name
Dim rng_FindRange As Range                                                      '   search range

Set rng_FindRange = ActiveSheet.Range("F3:G" amp; int_LR).find(str_Name)
If Not rng_FindRange Is Nothing Then
    Me.txtDiscipline = ActiveSheet.Cells(rng_FindRange.Row, 7)
Else    '   If Not rng_FindRange Is Nothing
    Me.txtDiscipline = "Name not found"
End If  '   If Not rng_FindRange Is Nothing

End Sub
 

и когда пользовательская форма инициализируется

 Private Sub UserForm_Initialize()
Dim int_LR As Integer: int_LR = ActiveSheet.Cells(Rows.Count, 6).End(xlUp).Row '   find last row of table

Me.comboName.Style = fmStyleDropDownList '   combobox list style
For i = 3 To int_LR '   loop adding items to combobox
    Me.comboName.AddItem ActiveSheet.Cells(i, 6)
Next i
End Sub
 

Комментарии:

1. Спасибо, это работает, но когда я закрываю пользовательскую форму, появляется сообщение as, и я не знаю точной причины этого сообщения. Я загружаю скриншот сообщения выше.

2. Попробуйте добавить код в событие userform_initialize: me.showmodal=false и перед завершением события comboname_Change установите rng_FindRange = ничего. вы также можете изменить событие comboname с change на keydown и привязать makro к запуску после keyreturn down.