在列表框之间添加和删除项目

时间:2017-04-25 18:31:31

标签: excel vba listbox userform

我正在努力实现管理和交换"项目"在我的UserForm上的两个列表框之间。 I.E.我在ListBox1中有项目(我使用多选),然后点击"添加"命令按钮和所有项目都添加到ListBox2。 - 那段代码有效。我也可以根据选择或"全部清除"从ListBox2中删除项目。命令按钮。

当我添加"删除"使用的类似代码时命令按钮到"添加"命令按钮我收到一个错误。我的目标是从ListBox1中删除项目,以便我不再在ListBox2中重新添加或复制它们。错误是"运行时错误' - 2147467259(80004005)':未指定的错误"。

我已将问题缩小到某个来源,但我不知道如何解决它。问题是我填充ListBox1的方式。目前,我使用命名范围填充ListBox1,此命名范围指的是表中的列。

MyUserForm.ListBox1.RowSource = "ListOfItems"

如果我使用以下代码,我不会得到相同的错误,一切正常。

With MyUserForm.ListBox1.
   .AddItem "Item 1"
   .AddItem "Item 2"
   .AddItem "Item 3"
   .AddItem "Item 4"
End With

我真的很想坚持第一种方法"填充ListBox1,因为命名范围是动态的并且由于频繁更改。

这是有效的代码。我使用这段代码来"添加" ListBox2的项目(我已编号代码行以便于参考):

(1)For i = 0 To LIstBox1.ListCount - 1
(2)   If ListBox1.Selected(i) = True Then
(3)       ListBox2.AddItem ListBox1.List(i)
(4)    End If
(5)Next

以下是我用来从LitBox1中删除已添加到ListBox2中的项目的代码:

(6)For i = ListBox1.ListCount - 1 To 0 Step -1
(7)    If ListBox1.Selected(i) = True Then
(8)        ListBox1.Selected(i) = False
(9)        ListBox1.RemoveItem (i)
(10)    End If
(11)Next

单击调试时,上述错误在第(9)行。我已尝试使用和不使用第8行的代码,但没有运气。

任何帮助将不胜感激。

对于这篇帖子感到抱歉,我认为提供更多细节比提供更多细节更好。

2 个答案:

答案 0 :(得分:0)

尝试通过循环命名范围来填充列表框。我认为这可以让它保持动态,但一次添加一个。

For each entry in sheet1.range("ListOfItems") 'adjust sheet as necessary
    MyUserForm.ListBox1.AddItem entry
next

答案 1 :(得分:0)

不要为ListBox1设置RowSource属性,而是通过在UserForm初始化事件期间循环遍历ListOfItems来添加项目,如下所示...

Private Sub UserForm_Initialize()
Dim cell As Range
With Me.ListBox1
    For Each cell In Range("ListOfItems")
        .AddItem cell
    Next cell
End With
End Sub

然后在命令按钮下面(在示例代码中命名为AddItem)将所选项添加到ListBox2中,放置以下代码...

Private Sub AddItem_Click()
Dim i As Long
With Me.ListBox1
    For i = 0 To .ListCount - 1
        If .Selected(i) Then
            Me.ListBox2.AddItem .List(i)
        End If
    Next i
    For i = .ListCount - 1 To 0 Step -1
        If .Selected(i) Then
            .RemoveItem i
        End If
    Next i
End With
End Sub