搜索ListBox错误_无法设置List属性。无效的属性值

时间:2019-01-19 08:51:48

标签: excel vba userform

我想在TextBox2中输入数据以在ListBox1中搜索数据,但是它出现错误“无法设置List属性。无效的属性值”。在“ .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

1 个答案:

答案 0 :(得分:0)

未声明变量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的行和列的控制不足。但是,将其排序后,您可能会发现您要分配的值不存在。因此,使程序崩溃的行可能包含多个错误。