Excel VBA-用于显示多行值的Userform

Excel VBA-用于显示多行值的Userform,excel,vba,for-loop,userform,Excel,Vba,For Loop,Userform,我是VBA新手,花了相当长的时间在互联网上搜寻,希望能找到VBA问题的答案,但没有结果。如果您能提供任何建议,我将不胜感激 我创建了一个Userform,使用户可以在文本框中输入多达5个唯一的ID,以及6条不同的信息(文本框和列表框的混合),这些信息对于所有5个ID输入都保持不变 然后,该信息被登录到工作表中,每个唯一ID都有自己的行,其余6条信息在每个对应行中重复 对于每个记录的ID段,将自动生成一个唯一的参考号,这意味着您将有一个表,其中前两列如下所示: 唯一参考号 唯一ID 001 212

我是VBA新手,花了相当长的时间在互联网上搜寻,希望能找到VBA问题的答案,但没有结果。如果您能提供任何建议,我将不胜感激

我创建了一个Userform,使用户可以在文本框中输入多达5个唯一的ID,以及6条不同的信息(文本框和列表框的混合),这些信息对于所有5个ID输入都保持不变

然后,该信息被登录到工作表中,每个唯一ID都有自己的行,其余6条信息在每个对应行中重复

对于每个记录的ID段,将自动生成一个唯一的参考号,这意味着您将有一个表,其中前两列如下所示:

唯一参考号 唯一ID 001 2120 001 2130 001 8765 002 7688 002 7684 002 7682 002 7681 002 7666
当做一些与查找匹配项有关的事情时,我喜欢将这两部分分开——首先查找所有匹配项,然后处理它们。保持代码更干净,您可以专注于主要任务,而不是在查找和处理之间切换上下文。 (下面是未测试的代码)

Private子命令按钮1\u单击()
常量最大点击量(只要=5)
尺寸x等长,作为集合找到,rw作为范围
“拿到所有的火柴
带工作表(“示例电子表格”)
Set found=FindAll(.Range(“A1:A”)和.Cells(.Rows.Count,1).End(xlUp.Row),Search.Value)
以
如果找到,则计数>0
对于x=1,找到。计数
如果x=1,则
设置rw=found(x).EntireRow'此匹配单元格的整行
Me.ID1.Value=rw.Cells(2.Value)
Me.Branch.Value=rw.Cells(3.Value)
Me.AccountNo.Value=rw.Cells(4.Value)
Me.Name.Value=rw.Cells(5.Value)
Me.DateReceived.Value=rw.Cells(6.Value)
Me.DateClosed.Value=rw.Cells(7.Value)
ElseIf x>最大点击次数
“确保我们没有找到太多。。。
MsgBox“&Search.Value”的匹配项(&find.Count&”)太多
其他的
Me.Controls(“ID”&x).Value=found(x).Value'按名称引用控件
如果结束
下一个x
其他的
MsgBox“无点击”&搜索值
如果结束
端接头
'返回集合中所有匹配的单元格
公共函数FindAll(rng作为范围,v)作为集合
尺寸rv为新系列,f为范围
Dim addr作为字符串
设置f=rng.Find(what:=v,after:=rng.Cells(rng.Cells.Count)_
LookIn:=xlValues,LookAt:=xlother,SearchOrder:=xlByRows_
SearchDirection:=xlNext,MatchCase:=False)
如果不是f,则addr=f.Address()
直到f什么都不是
rv.添加f
设置f=rng.FindNext(后面:=f)
如果f.Address()=addr,则退出Do
环
设置FindAll=rv
端函数

我不太明白。一旦
被发现
变为
就永远不会重置为
,这是否重要?不确定您是否需要该布尔值,并且使用
Find
可能更有效。谢谢您的评论。是的,我也不确定布尔运算的必要性——我现在正在学习。当然会考虑查找功能。提姆非常感谢你的建议和帮助!今天晚些时候,我将测试/修改您提供的代码,并让您知道它是如何运行的。好的,我已经测试了代码,我们肯定正在接近!userform中的ID框(1、2、3、4、5等)现在都根据行数填充,但它们填充的是第一列中列出的值(参考号),而不是第2列中的唯一ID。我正在尝试调整代码,看看是否可以让它看到正确的第二列,但欢迎任何进一步的建议。肯定取得了进展,非常感谢您的帮助!我修改了Me.Controls(“ID”&x).Value=found(x).Value to Me.Controls(“ID”&x).Value=found(x).Offset(,1).Value,现在它完全按照我希望的那样工作。我非常感谢你对我的帮助。我几乎要放弃了。非常感谢你!!很高兴听到你成功了