修改多列ListBox搜索代码触发Run-Time Error 380/381求助
解决ListBox适配11列时的运行时错误380/381问题
错误核心原因
这两个错误的根源是ListBox控件的ColumnCount属性未设置为11,同时原代码添加行的逻辑错误:每列执行一次.AddItem导致ListBox行结构混乱,无法正确访问多列数据。
解决步骤
调整ListBox控件属性
打开窗体设计视图,选中ListBox2,在属性窗口找到ColumnCount,将值改为11;可按需设置ColumnWidths(例如50;50;...,共11个数值用分号分隔)。修正VBA代码逻辑
每行仅执行一次.AddItem,再填充所有列,避免行结构混乱:
Private Sub TextBox2_AfterUpdate() Dim ColHead As Integer, ListRow As Integer, ShRow As Integer, LastRow As Long Dim FindVal As Variant Dim MatchFound As Boolean With Me.ListBox2 .Clear ' 添加表头:先新增一行,再填充11列数据 .AddItem For ColHead = 1 To 11 .List(0, ColHead - 1) = Sheet2.Cells(1, ColHead).Value Next ColHead ListRow = 1 ' 处理搜索值格式 If IsDate(Me.TextBox2.Value) Then FindVal = CDate(Me.TextBox2.Value) ElseIf IsNumeric(Me.TextBox2.Value) Then FindVal = Val(Me.TextBox2.Value) Else FindVal = "*" & Me.TextBox2.Value & "*" End If LastRow = Sheet2.Range("A" & Rows.Count).End(xlUp).Row ' 遍历工作表数据行 For ShRow = 2 To LastRow MatchFound = False ' 逐列判断当前行是否存在匹配值 For ColHead = 1 To 11 If Sheet2.Cells(ShRow, ColHead).Value Like FindVal Then MatchFound = True Exit For End If Next ColHead If MatchFound Then ' 新增一行后填充11列数据 .AddItem For ColHead = 1 To 11 .List(ListRow, ColHead - 1) = Sheet2.Cells(ShRow, ColHead).Value Next ColHead ListRow = ListRow + 1 End If Next ShRow End With End Sub
补充说明
- 原代码用
CountIf判断整行匹配易出现误判(如空白单元格、数据类型不兼容),改为逐列判断更精准。 - 确认Sheet2为目标工作表名称,若实际名称不同需对应修改。
内容的提问来源于stack exchange,提问作者arifnkhan
相关产品推荐
相关产品推荐

