以编程方式填充多列ListBox

时间:2018-02-07 13:53:26

标签: excel vba userform

我希望用多列ListBox填充UserForm以供选择。 ListBox列填充了存储在自定义类模块对象(工作请求和组件)中的数据。我尽可能清楚地表达了我的逻辑,寻求帮助以正确的方式实现这一点。

我收到错误

  

运行时错误'381':无法设置List属性。无效   属性数组索引。

,调试器突出显示行UserForm.Show

Private Sub UserForm_Initialize()

    ListBox1.ColumnCount = 5
    ListBox1.ColumnWidth = “100;100;100;100;100;”

    Dim i as Integer
    With ListBox1
        For i = 0 to (wrArraySize - 1)
            .AddItem
            .List(i, 0) = WorkRequests(i + 1).WorkRequestNumber
            .List(i, 1) = WorkRequests(i + 1).Product
            .List(i, 2) = WorkRequests(i + 1).ComponentName
            .List(i, 3) = WorkRequests(i + 1).NumberPiecesCompleted
            .List(i, 4) = WorkRequests(i + 1).NumberPiecesTotal
        Next
    End With

End Sub

此外,如果您有额外的时间,我需要知道如何引用所有选定的ListBox条目(即使用CTRL +单击以选择不相邻的项目)。谢谢。

2 个答案:

答案 0 :(得分:0)

首先尝试以下简单代码。如果它工作正常,那么检查您的数组和其他引用

Private Sub UserForm_Initialize()
    ListBox1.ColumnCount = 5
    ListBox1.ColumnWidths = "20;20;20;20;20;"

    Dim i As Integer
    With ListBox1
        For i = 0 To 5
            .AddItem
            .List(i, 0) = i
            .List(i, 1) = i
            .List(i, 2) = i
            .List(i, 3) = i
            .List(i, 4) = i
        Next
    End With

End Sub

答案 1 :(得分:0)

您的代码看起来是正确的。

对于调试:如果对象模块中出现错误,调试器很容易返回调用者模块,这可能是在线MATCH (from:Way { id: $idFrom }), (to:Way { id: $idTo }) WITH from, to CALL apoc.algo.dijkstraWithDefaultWeight(from, to, 'T1>|T2', 'distance', 1) YIELD path, weight RETURN path, weight 停止的原因。您可以尝试设置类似UserForm.Show的内容来覆盖模块中的默认错误处理程序(仅用于测试)以捕获错误。

用于管理多项选择:

On Error Resume Next

N.b。:删除所选项目需要反转循环,因为.ListCount正在改变,所以

For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) Then
        ' do something
    End If
Next