excelvba+;根据ComboBox中的值填充多个文本框(带或不带循环)
主席先生,我正努力解决这个问题。请帮忙。我在用户表单上制作了很多文本框,比如textbox1、2、3、4、5、6、7、8到16。我有这样的数据 我想在组合框中输入一个名字,并想在文本框1中显示第一个搜索结果的名字,在文本框2中显示年龄,在文本框3中显示城市,然后在下一个单元格中循环搜索相同的值,如果在文本框4中找到了他的名字,在文本框5中显示年龄,在文本框6中显示城市,依此类推(最多可以找到4个结果)。我正在使用下面的代码,但它只在Textbox1、Textbox2和Textbox3中显示第一个找到的结果,但在Textbox4、5和6中不会弹出第二个找到的结果。请帮助:代码如下excelvba+;根据ComboBox中的值填充多个文本框(带或不带循环),excel,vba,Excel,Vba,主席先生,我正努力解决这个问题。请帮忙。我在用户表单上制作了很多文本框,比如textbox1、2、3、4、5、6、7、8到16。我有这样的数据 我想在组合框中输入一个名字,并想在文本框1中显示第一个搜索结果的名字,在文本框2中显示年龄,在文本框3中显示城市,然后在下一个单元格中循环搜索相同的值,如果在文本框4中找到了他的名字,在文本框5中显示年龄,在文本框6中显示城市,依此类推(最多可以找到4个结果)。我正在使用下面的代码,但它只在Textbox1、Textbox2和Textbox3中显示第一个
Private Sub CommandButton1_Click()
Dim fnd As String, FirstFound As String
Dim FoundCell As Range, rng As Range
Dim myRange As Range, LastCell As Range
Dim a, b, c As Integer
a = 1
b = 2
c = 3
fnd = ComboBox1.Value
Set myRange = Sheets("Data").Range("B4:B50")
Set LastCell = myRange.Cells(myRange.Cells.Count)
Set FoundCell = myRange.Find(What:=fnd, After:=LastCell)
If Not FoundCell Is Nothing Then
FirstFound = FoundCell.Address
Else
GoTo NothingFound
End If
Set rng = FoundCell
Do Until FoundCell Is Nothing
UserForm1.Controls("TextBox" & a).Text = FoundCell.Offset(0, 0).Value
UserForm1.Controls("TextBox" & b).Text = FoundCell.Offset(0, 1).Value
UserForm1.Controls("TextBox" & c).Text = FoundCell.Offset(0, 2).Value
a = a + 3
b = b + 3
c = c + 3
If FoundCell.Address = FirstFound Then Exit Do
Loop
Exit Sub
NothingFound:
TextBox1.Text = "not found"
TextBox2.Text = "not found"
TextBox3.Text = "not found"
End Sub
请帮我整理一下。我已经搜索了数百个网站,但仍停留在这一点上。提前多谢了你不会错过下一张唱片的。以下是循环的快速修复方法:
Do
UserForm1.Controls("TextBox" & a).Text = FoundCell.Offset(0, 0).value
UserForm1.Controls("TextBox" & b).Text = FoundCell.Offset(0, 1).value
UserForm1.Controls("TextBox" & c).Text = FoundCell.Offset(0, 2).value
a = a + 3
b = b + 3
c = c + 3
Set FoundCell = myRange.Find(What:=fnd, After:=FoundCell) ' <-- get next record
Loop Until FoundCell.Address = FirstFound '<-- Stop when retrieveing again the same first record
Do
UserForm1.Controls(“TextBox”&a).Text=FoundCell.Offset(0,0).value
UserForm1.Controls(“TextBox”&b).Text=FoundCell.Offset(0,1).value
UserForm1.Controls(“TextBox”&c).Text=FoundCell.Offset(0,2).value
a=a+3
b=b+3
c=c+3
设置FoundCell=myRange.Find(What:=fnd,After:=FoundCell)您可以使用AutoFilter()
Option Explicit
Private Sub CommandButton1_Click()
Dim fnd As String
Dim txtBoxOffset As Long, j As Integer
Dim cell As Range
If Me.ComboBox1.ListIndex = -1 Then Exit Sub
fnd = Me.ComboBox1.Value
With Sheets("Data").Range("B3:B50")
.AutoFilter field:=1, Criteria1:=fnd
If Application.WorksheetFunction.Subtotal(103, .Cells) > 1 Then
For Each cell In .Resize(.Rows.Count - 1).Offset(1).SpecialCells(xlCellTypeVisible)
For j = 1 To 3
Me.Controls("TextBox" & (txtBoxOffset + j)).Text = cell.Offset(, j - 1)
Next
txtBoxOffset = txtBoxOffset + 3
Next
Else
For j = 1 To 3
Me.Controls("TextBox" & j).Text = "not found"
Next
End If
.Parent.AutoFilterMode = False
End With
End Sub
@MohdAsif,你挺过来了吗?谢谢你的解决方案不客气。如果您关注“解决方案长度”问题,那么考虑上面所需要的所有代码,即它将您的整个代码替换为OPThanks中的解决方案。