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