2

好的,这似乎很疯狂,我已经研究了几个小时,但我找不到任何有效的方法。这篇文章将完全没有代码,但我将非常快速地解释我正在尝试做什么。

所以我有一个我已经成功填充的列表框,它工作得很好。在用户指示的某个时刻,用户将从列表框中选择一行,将其命名为 RecordBox,查看一些信息,也许添加一些信息,然后单击“保存”命令按钮。单击此保存按钮后,我想将所选行从 RecordBox 复制到第二个列表框。我想称之为DetailsBox。

我需要一种方法来获取以标题、组合框条目和文本框条目的形式显示在表单中的数据,将一行添加到“DetailsBox”并将信息复制到该行的特定列,或者我需要简单地将所选行从 RecordBox 复制到 DetailsBox。

无论如何,如果某些代码会有所帮助,请询问,但除了命令按钮单击事件之外真的没有任何其他代码。

我希望这将是足够的信息。

4

2 回答 2

3

这很简单

ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)

跟进(来自评论)

我想我要将该行发送到工作表,然后从那里将其添加到另一个列表框。

我相信您使用的是多列列表框。在这种情况下,上面的代码只会将第一列添加到第二个列表框。您需要遍历其余列以从Listbox1.

假设您的用户表单看起来像这样。我为您创建了一个小样本。

在此处输入图像描述

并且列表框的属性设置如下

在此处输入图像描述

这就是你的Sheet1样子。

在此处输入图像描述

现在在用户窗体中使用此代码。

Private Sub UserForm_Initialize()
    '~~> Adding Sample Data to listbox 1
    ListBox1.List = ThisWorkbook.Sheets(1).Range("A1:E3").Value
End Sub

Private Sub CommandButton1_Click()
    Dim iIndex
    Dim i As Long, j As Long, k As Long

    With ListBox1
        i = .ListIndex

        ListBox2.AddItem .List(i, 0), 0

        j = ListBox2.ListCount - 1

        For k = 1 To .ColumnCount - 1
            ListBox2.List(j, k) = .List(i, k)
        Next k
    End With
End Sub

当您单击选择中的项目Listbox1并按下命令按钮时,您会注意到所选行Listbox1已成功复制到Listbox2

在此处输入图像描述

于 2013-09-28T08:02:53.290 回答
0

对于任何想要使用循环和多选将项目从一个列表框发送到另一个列表框的人。这是一些可能有帮助的代码。您需要将两个列表框的属性设置为多选。1-fmMultiSelectMulti。然后使用与上面发布的 Siddharth Rout 相同的设置/设置。

 Private Sub CommandButton1_Click()
Dim iIndex
Dim i As Long, j As Long, k As Long
ListBox2.Clear
For i = 0 To 2' loop 3 times for each row in listbox1.
   If ListBox1.Selected(i) = True Then 'Get the first selected Row index number.

   ListBox2.AddItem ListBox1.List(i, 0) 'Gets the first item from listbox1 and puts it in listbox2.
        j = ListBox2.ListCount - 1 ' counts all items in listbox2. which is one item.

        For k = 1 To ListBox1.ColumnCount - 1 'Count the columns listbox1.Now that the first item is in listbox2 _
        move over one column & copy the next value to listbox2. loop 4 more times for 4th entry of row one.
            ListBox2.List(j, k) = ListBox1.List(i, k)
         Next k
   End If
 Next i
End Sub
于 2013-10-26T09:03:10.180 回答