在列表框VBA中搜索并显示多列数据的多个条目

在列表框VBA中搜索并显示多列数据的多个条目,vba,excel,search,listbox,Vba,Excel,Search,Listbox,我以前在这个论坛上看到过类似的案例,但我没有看到一个合适的解决方案,所以这里是 基本上,我有一个带有列表框的用户表单,用于管理数据表中的数据。有多个实体与每个“条目ID”(列A)相关联。当我在searchbox中搜索“条目ID”时,我希望在列表框中看到所有相关条目,每个条目都有A到J列(因此代码需要循环查找多行,并将每行的多个列“复制”到列表框中,我认为这正是我努力的方向) 我在论坛上找到了一段类似案例的代码,但似乎无法复制多个专栏: Private Sub cmdFind_Click() Di

我以前在这个论坛上看到过类似的案例,但我没有看到一个合适的解决方案,所以这里是

基本上,我有一个带有列表框的用户表单,用于管理数据表中的数据。有多个实体与每个“条目ID”(列A)相关联。当我在searchbox中搜索“条目ID”时,我希望在列表框中看到所有相关条目,每个条目都有A到J列(因此代码需要循环查找多行,并将每行的多个列“复制”到列表框中,我认为这正是我努力的方向)

我在论坛上找到了一段类似案例的代码,但似乎无法复制多个专栏:

Private Sub cmdFind_Click()
Dim sht As Worksheet
Dim lastrow As Variant
Dim strSearch As String
Dim aCell As Range
Dim row_number As Integer
Dim item_in_review As Variant


Set sht = ActiveWorkbook.Sheets("a")
lastrow = sht.Range("A" & Rows.Count).End(xlUp).Row
strSearch = txtSearch.Text
    Set aCell = sht.Range("A1:A" & lastrow).Find(What:=strSearch, LookIn:=xlValues, _
    LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)

      If Not aCell Is Nothing Then
         GoTo wfrefvalid
     Else
MsgBox "Oops! That Work File does not exist. Please try again.", Title:="Try again"
txtSearch.Value = ""
        End If
    Exit Sub

wfrefvalid:
row_number = 3
'clears the listbox so that you have dont have a continuously growing list
lstSearch.Clear
Do
DoEvents
row_number = row_number + 1
item_in_review = sht.Range("A" & row_number)
If item_in_review = txtSearch.Text Then
lstSearch.AddItem sht.Range("A" & row_number & ":J" & row_number)

End If
Loop Until item_in_review = ""

End Sub
我很确定这不是我想做的事情的正确方法,但我找不到任何确切的类似案例

如有任何提示,我将不胜感激


编辑:@braX帮助我删除了运行时错误(代码已更新),但列表框中没有上载数据。。。可能我没有正确地引用“row”-循环或addItem函数,但不确定是哪一个

缺少列A的行号: 你有这个

lstSearch.AddItem表单(“a”).范围(“a:J”和行号)

看起来应该更像这样


lstSearch.AddItem Sheets(“a”).Range(“a”&row\u number&“:J”&row\u number)

谢谢!我已经修改了代码,至少删除了错误,但没有数据上传到列表框。当一个ID不存在时,错误处理程序会识别,但如果一个ID确实存在,则不会发生任何事情(即没有填充或任何事情)。我猜技术上你回答了我遇到的具体错误,所以我会给你一个“回答”的分数,但是你对填充我的列表框有什么建议吗?提前谢谢!首先尝试将范围转换为数组,然后使用
.List
而不是
.AddItem
如下:Dim Arr()作为Variant Arr=range(“E6:H6”)ListBox1.List=Arr听起来是个好主意。最后一个问题:由于我的数组将是一个变化的,在某些情况下是不连续的范围,所以最好使用什么语法向数组中添加数据?特别是考虑到如果A中的ID与搜索条件匹配,则标准将为。如果数组的边界需要更改,您可以使用
Redim Preserve