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
根据需要更改名称(范围、用户窗体、文本框和组合框)
我只是在寻找最直接的方法来 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
根据需要更改名称(范围、用户窗体、文本框和组合框)