Возвращаемое значение в текстовом поле из Combobox в Excel
Я просто ищу самый прямой способ вернуть значение в трех текстовых полях, основываясь на выборе из выпадающего списка в пользовательской форме.
У меня есть рабочий лист под названием «TPIDLookup», который состоит из 4 столбцов; TPID, Филиал, Компания и имя MQ. Я установил диапазоны для всех четырех столбцов, теперь мне нужны значения из Branch Plant, Company и MQ Name, которые будут отображаться, когда TPID выбран из Combobox. Однако я теряюсь, когда дело доходит до этого в Excel, хотя я знаком с тем, как это будет сделано в Access.
Если это помогает, вот код, который я использовал для создания списка combobox:
- Зацикливание через файлы Txt с использованием проблемы VBA - DIR ()
- Сохранить значение текстового поля, VBA, Excel
- Текст текстового поля в Excel VBA
- Назначение значений текстового поля соответствующим ячейкам на основе имени
- VBA, чтобы проверить, существует ли текст в текстовом поле, а затем проверить, находится ли дата в правильном формате
Set WS = Worksheets("TPIDLookup") For Each TPID In WS.Range("TPID") With Me.cmbTPID .AddItem TPID.Value End With Next TPID
Мое исследование в Интернете еще больше смутило меня, и я уверен, что есть способ сделать это прямо сейчас. Я не программист, и я новичок в VBA, но любая помощь будет очень признательна, поскольку это последний шаг для меня, чтобы закончить мою форму.
Большое спасибо,
Джон.
- Excel VBA; UserForm, запуск одного фрагмента кода для разных значений TextBox
- Имя свойства динамически созданных текстовых полей
- Каждый символ в TextBox разного цвета в vba excel
- Передайте значение текстового поля UserForm в ячейку
- Как перенести данные из TextBox в формулу в другом текстовом поле
- Добавление чисел с использованием форм Excel
- Excel 2010 не может вставляться в текстовое поле формы
- Очистка строки, при выборе элемента в текстовом поле, из текстового поля и исходного листа
Создайте событие изменения combobox для вашего combbox cmbTPID и используйте этот код. Замените имена текстовых полей и имена диапазонов с вашими фактическими именами:
Private Sub cmbTPID_Change() Dim ws As Worksheet Dim rFound As Range If Me.cmbTPID.ListIndex = -1 Then 'Nothing selected, or user manually typed an invalid entry 'Clear textboxes Me.txtBranch.Value = vbNullString Me.txtCompanyNo.Value = vbNullString Me.txtMQName.Value = vbNullString Else 'Valid TPID selected 'Find it and populate the textboxes Set ws = ActiveWorkbook.Sheets("TPIDLookup") Set rFound = ws.Range("TPID").Find(Me.cmbTPID.Text, , xlValues, xlWhole) If Not rFound Is Nothing Then Me.txtBranch.Value = Intersect(ws.Range("Branch"), rFound.EntireRow).Value Me.txtCompanyNo.Value = Intersect(ws.Range("CompanyNo"), rFound.EntireRow).Value Me.txtMQName.Value = Intersect(ws.Range("MQName"), rFound.EntireRow).Value End If End If End Sub
вы можете попробовать это
вот ваш «основной» отрывок подкода, соответствующий вашему вопросу
Option Explicit Public TPIDRng As Range, branchRng As Range, companyRng As Range, MQRng As Range Sub main() Set TPIDRng = GetColumnUsedRange(Worksheets("TPIDLookup"), "A") Set branchRng = GetColumnUsedRange(Worksheets("TPIDLookup"), "B") Set companyRng = GetColumnUsedRange(Worksheets("TPIDLookup"), "C") Set MQRng = GetColumnUsedRange(Worksheets("TPIDLookup"), "D") With UserForm1 ' change it to whatever name your actual UserForm has .ComboBox1.List = Application.Transpose(TPIDRng) .Show End With Unload UserForm1 End Sub Function GetColumnUsedRange(sht As Worksheet, col As String) With sht Set GetColumnUsedRange = .Range(.Cells(1, col), .Cells(.Rows.Count, col).End(xlUp)) End With End Function
и вот соответствующий код в панели кода UserForm
Private Sub ComboBox1_Change() With Me If .ComboBox1.ListIndex = -1 Then .TextBoxBranch.Text = "" .TextBoxCompany.Text = "" .TextBoxMQ.Text = "" Else .TextBoxBranch.Text = branchRng.Cells(.ComboBox1.ListIndex + 1, 1).Value .TextBoxCompany.Text = companyRng.Cells(.ComboBox1.ListIndex + 1, 1).Value .TextBoxMQ.Text = MQRng.Cells(.ComboBox1.ListIndex + 1, 1).Value End If End With End Sub Private Sub CommandButton1_Click() Me.Hide End Sub
изменить имена (для диапазонов, Userform, TextBoxes и Combobox) в соответствии с вашими потребностями