【问题标题】:Moving items from Listbox1 to Listbox2 code将项目从 Listbox1 移动到 Listbox2 代码
【发布时间】:2020-05-22 14:57:51
【问题描述】:

因此,Listbox1 被填充(来自另一个子,链接到工作簿中的单元格范围),用户可以使用命令按钮(添加)从该列表框中选择(一次一个)要显示在 Listbox2 中的项目移动它们。我几乎设法让它完美。我的问题是,如果用户 only 选择了 Listbox1 中的最后一个条目,则 Listbox1 中所有其他可能的条目都将被删除(空白/不可见/无法选择)。

我只想从 Listbox1 中删除从 Listbox1 中选择的条目,因为它出现在 Listbox2 中。

代码如下:

Private Sub Add_Click()
Dim i as Integer
    For i = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(i) = True Then
            Me.ListBox2.AddItem Me.ListBox1.List(i)
        End If
    Next i

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

End Sub

如果这里有什么明显的地方,我真的很抱歉。但是这些列表框已经让我发疯了大约 3 天。 提前致谢

【问题讨论】:

  • 您究竟是如何填充框 1 的?顺便说一句,如果列表框是单选的,你可以避免第二个循环。
  • Listbox1 由一个单独的子组件填充:ListBox1.AddItem Sheets("lookups").Range("H3")。有三个单独的行/引用的单元格。理想情况下,会有一个动态选择的命名范围,但它从未落地。
  • 您是否设置了行源 - 检查属性 - 因为这会导致问题?我无法复制您的错误。 listbox1 有多少项?
  • 我已经阅读了大量关于 RowSource 的帖子,并且已经避开了。我的 Listbox1 项目的完整代码是:``` Private Sub UserForm_Activate() If Sheets("EnteredData").Range("E4") = "NDS" Then ListBox1.AddItem Sheets("lookups").Range("F3 ") ListBox1.AddItem Sheets("lookups").Range("F4") ListBox1.AddItem Sheets("lookups").Range("F5") 否则 ListBox1.AddItem Sheets("lookups").Range("H3" ) ListBox1.AddItem Sheets("lookups").Range("H4") ListBox1.AddItem Sheets("lookups").Range("H5") End If End Sub ```
  • 但是 RowSource 中肯定什么都没有

标签: excel vba userform


【解决方案1】:

这是一个单选列表,所以一旦你点击了选定的项目,请尝试在每个循环中添加Exit For

Private Sub Add_Click()
    Dim i as Long

    For i = Me.ListBox1.ListCount - 1 To 0 Step -1
        If Me.ListBox1.Selected(i) = True Then
            Me.ListBox2.AddItem Me.ListBox1.List(i) 
            Me.ListBox1.RemoveItem i
            Exit For
        End If
    Next

End Sub

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多