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

我正试图实现pipe理和交换位于我的UserForm两个列表框之间的“项目”。 IE我有列表框1中的项目(我使用多选),然后单击“添加”命令button,所有的项目被添加到列表框2。 – 这段代码的作品。 我也可以根据select或“全部清除”命令button从ListBox2中删除项目。

当我添加“删除”命令button使用类似的代码到“添加”命令button时,我得到一个错误。 我的目标是从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的“方法”,因为命名的范围是dynamic的,并且经常变化。

这是有用的代码。 我用这个代码来“添加”项目到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),当我点击debugging。 我已经尝试了有和没有第8行的代码,但没有运气。

任何帮助将不胜感激。

不好意思,我认为最好是提供更多的细节,而不是太less。

不要为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 

然后在命令button(示例代码中的名为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 

尝试通过遍历命名范围来填充你的列表框。 我认为这样可以保持dynamic,但一次添加一个。

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