搜索列表框错误 _ 无法设置列表 属性。无效 属性 值

Search ListBox Error _ Could not set the List property. Invalid property value

我想在TextBox2中输入数据,以便在ListBox1中搜索数据,但出现错误"Could not set the List property. Invalid property value"。调试“.List(iii, ii - 1) = x1(i, ii)”

我的代码

Private Sub TextBox2_Change()

Dim x1, i As Long, ii As Long, iii As Integer
x1 = [myCar]


Application.ScreenUpdating = False

With ListBox1
    If TextBox2 = "" Then
        .RowSource = "myCar"
    Else
        .RowSource = ""
        For i = 1 To UBound(x1, 1)
            If LCase(x1(i, 3)) Like LCase(TextBox2) & "*" Then 
                For ii = 1 To 12
                    .AddItem
                    .List(iii, ii - 1) = x1(i, ii)
                Next
                iii = iii + 1
            End If
        Next
    End If
End With

End Sub

未声明变量 x1。因此它应该是一个变体。 [myCar] 似乎是一个范围名称。如果是这样,如果已知其位置,则可以将其分配给 x1。也许您的 TextBox 在工作表上并且引用确实有效。也许 x1 从那时起是空的。我建议你测试一下。

接下来将 "MyCar" 分配给 ListBox 的 RowSource 属性。如您所知,属性 包含一个字符串。如果 MyCar 是范围名称,则它不能是有效的范围地址。也许像 Range(MyCar).Address 这样的东西会起作用。 .RowSource = "myCar" 只是将单词 "MyCar" 分配给 RowSource,这应该会失败。 在 For i = 1 To UBound(x1, 1) 中,您现在期望 x1 是一个数组。也许 x1 = [myCar] 等同于 ActiveSheet.Range(MyCar).Value。我不会使用该语法,但您已经在上面检查了它的功能。

假设 x1 实际上包含一个范围的值。如果未设置 ColumnsCount 属性,将它们分配给 ListBox 的 List 属性 应该会失败。从您的代码中看不出这一点。我们也无法判断 x1 中可用的列是否等于列表框中可用的列或代码要求的列。

列表框有行和列。鉴于您的变量 i 计算行数,您的变量 ii 应该计算列数(我会使用 R 和 C 来帮助我了解我正在做的事情)。那么,行列都算进去了,你的变量iii算什么?

所以,可以肯定是你的代码对ListBox的行列控制不够。但是,在排序之后,您可能会发现您希望分配的值不存在。因此,导致程序崩溃的那一行可能包含不止一个错误。