Return Excel 中 Combobox 的文本框中的值

Return value in text box from Combobox in Excel

我只是在寻找最直接的方法来 return 三个文本框中的值,基于从用户窗体中的组合框中进行的选择。

我有一个名为 'TPIDLookup' 的工作表,它包含 4 列; TPID、分公司、公司编号和 MQ 名称。我已经为所有四列设置了范围,现在我只需要在从组合框中选择 TPID 时显示 Branch Plant、Company 和 MQ Name 的值。然而,在 Excel 中执行此操作时我迷路了,尽管我熟悉如何在 Access 中完成此操作。

如果有帮助,这是我用来生成组合框列表的代码:

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

我在网络上的研究让我更加困惑,而且我确信有一种非常直接的方法可以做到这一点。我不是程序员,我是 VBA 的新手,但我将不胜感激任何帮助,因为这是我完成表格的最后一步。

非常感谢,

约翰。

为您的 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

你可以试试这个

这是与您的问题相关的 "main" 子代码摘录

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

这是用户窗体代码窗格中的相应代码

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

根据需要更改名称(范围、用户窗体、文本框和组合框)