ListBox搜索功能报错:无法设置List属性,无效属性值求助
解决ListBox设置List属性时的无效值错误
嘿,我帮你排查了这个ListBox的错误问题,咱们一步步来搞定它:
你遇到的「Could not set the List property. Invalid property value」错误,核心问题出在代码里的赋值逻辑——你本来想给匹配到的同一行的12个列赋值,但现在的写法会给每一列都新增一行,导致ListBox的索引混乱,触发了无效值错误。
错误原因拆解
- 你在
For ii = 1 To 12循环内每次都调用.AddItem,这会为每一列单独新增一行,而不是给同一行的多列赋值。ListBox的.List属性要求行索引必须是已存在的有效行,这种操作会让行索引和列数不匹配,直接报错。 iii变量没有初始化,默认值是0,但逻辑上需要和新增行的索引对应,否则也会出现索引越界的问题。- 切换
RowSource时没有清空ListBox,可能残留旧数据导致冲突。
修正后的代码
Private Sub TextBox2_Change() Dim x1, i As Long, ii As Long, iii As Integer x1 = [myCar] Application.ScreenUpdating = False With ListBox1 .Clear ' 先清空ListBox,避免旧数据干扰 If TextBox2 = "" Then .RowSource = "myCar" Else .RowSource = "" iii = 0 ' 初始化行索引(ListBox行索引从0开始) For i = 1 To UBound(x1, 1) ' 匹配第3列的前缀内容 If LCase(x1(i, 3)) Like LCase(TextBox2) & "*" Then .AddItem ' 只新增一行,对应当前匹配的记录 ' 给这一行的12个列逐一赋值 For ii = 1 To 12 .List(iii, ii - 1) = x1(i, ii) Next ii iii = iii + 1 ' 行索引加1,准备下一个匹配项 End If Next i End If End With Application.ScreenUpdating = True ' 恢复界面刷新,避免卡顿 End Sub
关键修改说明
- 新增
.Clear:在处理搜索前清空ListBox,彻底避免旧数据和新数据的冲突,尤其是从RowSource切换到手动赋值的场景下。 - 调整
.AddItem位置:把它移到列循环外面,每个匹配到的记录只新增一行,再循环给这行的所有列赋值,符合ListBox的赋值逻辑。 - 初始化
iii:明确设置iii = 0,和ListBox的0-based行索引对应,避免未初始化导致的索引错误。 - 恢复界面刷新:最后把
ScreenUpdating设回True,不然Excel界面可能会卡顿。
额外注意事项
- 确保你的ListBox1的
ColumnCount属性设置为12,否则赋值超过列数会再次报错。 - 确认命名区域
myCar确实包含12列数据,不然x1(i, ii)会出现下标越界的问题。
内容的提问来源于stack exchange,提问作者v1787v
相关产品推荐
相关产品推荐

