2016-04-20 2 views
0

Я просто ищу самый прямой способ вернуть значение в трех текстовых полях, основываясь на выборе из выпадающего списка в пользовательской форме.Возвращаемое значение в текстовом поле из Combobox в Excel

У меня есть рабочий лист под названием «TPIDLookup», который состоит из 4 столбцов; TPID, Филиал, Компания и имя MQ. Я установил диапазоны для всех четырех столбцов, теперь мне нужны значения из Branch Plant, Company и MQ Name, которые будут отображаться, когда TPID выбран из Combobox. Однако я теряюсь, когда дело доходит до этого в Excel, хотя я знаком с тем, как это будет сделано в Access.

Если это помогает, вот код, который я использовал для создания списка COMBOBOX:

Set WS = Worksheets("TPIDLookup") 
For Each TPID In WS.Range("TPID") 
With Me.cmbTPID 
.AddItem TPID.Value 
End With 
Next TPID 

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

Большое спасибо,

John.

+0

Джон, можете ли вы разместить весь свой код? Имея немного проблем с пониманием того, что вы пытаетесь сделать точно. – StormsEdge

+0

замените для каждого цикла следующим образом: «Для каждого TPID в WS.Range (« B2: B10 »)». просто Успение –

ответ

1

Создайте событие изменения combobox для вашего combbox cmbTPID и используйте этот код. Заменить имена TextBox и назвал имена диапазонов с реальными именами:

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 
+0

Tigeravatar, это сработало отлично! Спасибо! Это так же прямо, как вы можете получить, и я действительно понимаю код! Еще раз спасибо! –

0

вы могли бы попробовать это

вот ваш «основной» дополнительный код Отрывок отношение к вашему вопросу

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 

изменить имена (для бега ges, Userform, TextBoxes и Combobox) в соответствии с вашими потребностями

Смежные вопросы