2016-04-20 54 views
0

我只是尋找最直接的方式來返回三個文本框中的值,基於用戶窗體中的組合框中的選擇。Excel中的Combobox文本框中的返回值

我有一個名爲'TPIDLookup'的工作表,它包含4列; TPID,分廠,公司編號和MQ名稱。我已經設置了所有四列的範圍,現在我只需要從分支工廠,公司和MQ名稱中顯示從Combobox中選擇TPID時顯示的值。儘管我很熟悉在Access中如何完成這項工作,但我在Excel中這樣做時卻迷失了方向。

如果有幫助,這裏是我用來生成框列表代碼:

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

我在網上的研究已經困惑我就更多了,我肯定有死直前進的方式來做到這一點。我不是程序員,我是VBA的新手,但任何幫助都將不勝感激,因爲這是我完成表單的最後一步。

很多謝謝,

約翰。

+0

John可以請您發佈您的所有代碼?理解你想要完成的事情有點麻煩。 – StormsEdge

+0

替換爲像這樣的每個循環'對於WS.Range中的每個TPID(「B2:B10」)'。只是假設 –

回答

1

爲您的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 
+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 

更改名稱(for ran ges,Userform,TextBoxes和Combobox)根據您的需求

相關問題