【问题标题】:Search ListBox Error _ Could not set the List property. Invalid property value搜索 ListBox 错误 _ 无法设置 List 属性。无效的属性值
【发布时间】:2019-01-21 15:47:50
【问题描述】:

我想在 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

【问题讨论】:

    标签: excel vba userform


    【解决方案1】:

    变量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 中可用的列是否等于列表框中可用的列或代码要求的列。

    ListBox 有行和列。鉴于您的变量 i 计算行数,您的变量 ii 应该计算列数(我会使用 R 和 C 来帮助我遵循我正在做的事情)。那么,考虑到行和列,你的变量 iii 算什么?

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

    【讨论】:

    • 您的问题缺少信息。您的控件是在工作表上还是在用户表单上?如果他们在一个表格上,表格是如何被调用的?什么是 [MyCar]?如果它是一个范围,它的大小是多少(提及地址)以及它在哪个工作表上 - a)与控件在同一个工作表上,b)在调用用户表单的同一个工作表上,c)在另一个工作表上?您说您想使用“文本框输入来搜索列表框中的数据”。这对我来说毫无意义,你的代码都是关于设置一个列表框,而不是搜索。你的问题需要大修。在 cmets 中解释太复杂了。
    • 我听从您的建议,现在它已修复,先生。谢谢先生
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-11
    • 1970-01-01
    相关资源
    最近更新 更多