【发布时间】:2021-04-25 02:46:06
【问题描述】:
我创建了一个用户表单,使用户可以在文本框中输入最多 5 个唯一 ID,以及 6 个不同的信息(文本框和列表框的混合),这些信息对于所有 5 个 ID 输入都保持不变。
然后将此信息登录到工作表中,每个唯一 ID 都有自己的行,其余 6 条信息在每个对应行中重复。
对于每个记录的 ID 行,都有一个唯一的参考编号。将自动生成,这意味着您将拥有一个表,其中前两列如下所示:
| Unique Reference Number | Unique ID |
|---|---|
| 001 | 2120 |
| 001 | 2130 |
| 001 | 8765 |
| 002 | 7688 |
| 002 | 7684 |
| 002 | 7682 |
| 002 | 7681 |
| 002 | 7666 |
我在用户表单中添加了一个命令按钮和文本框,以使用户能够搜索唯一的参考编号(例如 001),但我希望代码能够在电子表格中找到所有相应的行(最多 5 行)包含搜索到的参考编号,然后在用于在用户表单中记录信息的相同文本/列表框中显示最多 5 行和 6 条信息。
当我当前搜索参考号时,用户表单在第一个 ID 文本框中显示第一个 ID,并在相应的文本框中显示 6 条信息,没有问题。但随后它会在第二个 ID 文本框中显示所有后续行的 ID 号 - 这意味着它正在查找正确的信息,但未将其显示到用户表单中的正确文本框中。
本质上,我试图让代码循环遍历工作表中的第一列并找到所有匹配值(参考编号),然后从相应 ID 文本框中的每一行中检索并显示唯一 ID 信息用户表单。
Private Sub CommandButton1_Click()
Dim x As Long
Dim y As Long
Dim found As Boolean
With Sheets("Example Spreadsheet")
x = .Range("A" & .Rows.Count).End(xlUp).Row
For y = 1 To x
If .Cells(y, 1).Text = Search.Value Then
If Not found Then
found = True
Me.ID1.Value = .Cells(y, 2)
Me.Branch.Value = .Cells(y, 3)
Me.AccountNo.Value = .Cells(y, 4)
Me.Name.Value = .Cells(y, 5)
Me.DateReceived.Value = .Cells(y, 6)
Me.DateClosed.Value = .Cells(y, 7)
Else
Me.ID2.Value = Me.ID2.Value & .Cells(y, 2)
End If
End If
Next y
End With
End Sub
代码仅涉及文本框 ID1 和 ID2,但我尝试合并其他 ID3-5 文本框,无法正确显示信息。
【问题讨论】:
-
不确定我是否遵循这一点。一旦
found变为True它永远不会重置为False,这是否重要?不确定您是否需要该布尔值,并且使用Find可能更有效。 -
感谢您的 cmets。是的,我也不确定是否需要布尔值-目前正在学习。肯定会考虑 Find 功能。
标签: excel vba for-loop userform