Excel多选多列列表框

时间:2015-07-07 15:49:38

标签: excel vba excel-vba listbox

我无法对从一个多列列表框中获取所选数据的用户表单进行编码,并将其添加到同一用户的另一个列表框中。添加后,数据将从源列表框中删除

"列表框"是数据所在的位置," listbox1"是它被添加到的地方。

Private Sub add_Click()

For i = 0 To ListBox.ListCount - 1
    If ListBox.Selected(i) = True Then
        NextEmpty = ListBox1.ListCount
        ListBox1.List(NextEmpty, 0) = ListBox.List(i, 0)
        ListBox1.List(NextEmpty, 1) = ListBox.List(i, 1)
        ListBox1.List(NextEmpty, 2) = ListBox.List(i, 2)
        ListBox.RemoveItem (i)
    End If
Next

End Sub

此代码为我提供了运行时错误' 381' "无法设置列表属性。无效的属性数组索引。" 我做了一些环顾四周,但似乎无法确定如何正确使用这些属性。任何帮助是极大的赞赏。

2 个答案:

答案 0 :(得分:1)

您无法将索引的值设置为大于列表中的最大值(并且最大值恰好是ListCount(如果基于零,则为ListCount-1。)

因此,您必须使用ListBox1.Add

add

答案 1 :(得分:1)

为了做到这一点,像丹尼尔说,我们需要使用添加功能。 在下面的代码中,您可以看到我在with-block中如何使用.additem函数 要在将选择移动到新的列表框后删除选择,我会向后循环 For i = MainListBox.ListCount - 1 To 0 Step -1

Private Sub add_Click()

Dim i As Integer
For i = 0 To MainListBox.ListCount - 1
    If MainListBox.Selected(i) Then
            With ListBox1
            .AddItem
            .List(.ListCount - 1, 0) = MainListBox.List(i, 0)
            .List(.ListCount - 1, 1) = MainListBox.List(i, 1)
            .List(.ListCount - 1, 2) = MainListBox.List(i, 2)
            End With
        End If
    Next i

For i = MainListBox.ListCount - 1 To 0 Step -1
    If MainListBox.Selected(i) Then
        MainListBox.RemoveItem (i)
    End If
Next i

End Sub