运行时错误380和381在通过Userform上的文本框在Listbox中搜索单词时产生



我是Excel VBA的新手。我想要一个代码,用于搜索列表框中有从工作表中绘制的数据的单词。我在YouTube上看到一个视频(链接:https://youtu.be/IuOYQASY3p4),它描述了一个代码,用于在Listbox中运行搜索,在同一个Userform的文本框中输入关键字。代码看起来非常适合我的项目。但我发现它完美地适用于6列的数据集,但是当我更改代码和相应的控制属性的11列的数据集,代码抛出运行时错误380和381在两个for…Next在代码中循环。我附上了一个Excel文件,我准备你这里的专家审查我正在使用的代码。如果你能告诉我哪里做错了,我将不胜感激。我用注释指出了代码中出现错误的地方。我在Windows 10上使用Excel 2013。

我代码:

Private Sub TextBox2_AfterUpdate()
With Me.ListBox2
.Clear
For ColHead = 1 To 11
.AddItem
.List(0, ColHead - 1) = Sheet2.Cells(1, ColHead).Value  '<<< 'Run-Time Error 380, Invalid Property Value
Next ColHead

' If I comment out the For... Next loop above the code runs up to the next For... Next loop below _
and there it throws up run-time error 381. I have marked it there with a comment.
ListRow = 1
If IsDate(Me.TextBox2) Then
FindVal = CDate(Me.TextBox2)
ElseIf IsNumeric(Me.TextBox2) Then FindVal = Val(Me.TextBox2)
Else
FindVal = "*" & Me.TextBox2 & "*"
End If
LastRow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
For ShRow = 2 To LastRow
FindRow = Application.WorksheetFunction.CountIf(Sheet2.Rows(ShRow).EntireRow, FindVal)
If FindRow > 0 Then
For ListCol = 1 To 11
.AddItem
.List(ListRow, ListCol - 1) = Sheet2.Cells(ShRow, ListCol).Value '<<< 'Run-Time Error 381, Invalid Property Value
Next ListCol
ListRow = ListRow + 1
End If
Next ShRow
End With
End Sub

谢谢你的帮助。

如果对列表框使用未绑定的数据源,则限制为10列:

来自官方文档:

将ColumnCount设置为0显示0列,将其设置为-1显示所有可用列。对于未绑定的数据源,有10列限制(0到9)。

有两种方法来填充列表框:
第一种是给列表框分配一个Range(该属性称为RowSouce)。有了它,您可以有10个以上的列,并且可以有一个标题行。这被称为" bounds "数据源(因为列表框数据绑定到一个范围)。
第二种方法是手动填充列表(就像您所做的那样),方法是对想要显示的每一行调用AddItem。由于数据没有绑定到任何东西,因此称为"unbound",并且由于某种原因,最多支持10列(0..9),并且您不能有标题行。

属性BoundColumn定义了哪个列被视为"值"。如果您将1定义为boundColumn并检查列表框的value-属性(例如在更改事件中),则使用所选行的第一列的值。对于绑定列表和未绑定列表都是如此。

最新更新