2017-04-25 77 views
1

我正试图实现管理和交换位于我的用户窗体上的两个列表框之间的“项目”。 I.E.我有列表框1中的项目(我使用多选),然后单击“添加”命令按钮,并将所有项目添加到列表框2。 - 这段代码起作用。我还可以根据选择或“全部清除”命令按钮从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中的第一个“法”,为命名范围是动态的,由于经常更换。

这是可用的代码。我usethis代码为“添加”项目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行的代码,但没有运气。

任何帮助将不胜感激。

对不起,我认为最好提供更多的细节,而不是太少。

回答

0

不要设置为ListBox1中的行来源属性,而不是由用户窗体期间通过一系列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 
0

尝试通过遍历命名范围来填充您的列表框。我认为这可以让它动态,但一次添加一件东西。

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

谢谢Sobigen和sktneer。您提出的解决方案非常完美!我认为“入口”应该被宣布为一个范围。 – IzakG