2013-09-28 166 views
2

好的,這看起來很瘋狂,我一直在研究它幾個小時,但我找不到任何有用的東西。這篇文章將會非常缺乏代碼,但我會很快解釋我正在嘗試做什麼。VBA列表框複製到列表框

所以我有一個列表框,我已經成功填充,它工作得很好。在用戶的指導下,用戶將從列表框中選擇一行,將其稱爲RecordBox,查看一些信息,可能會添加一些信息,然後單擊「保存」命令按鈕。在單擊此保存按鈕時,我想將選定的行從RecordBox複製到第二個列表框。我把它稱爲DetailsBox。

我要麼需要一種方式,以字幕,組合框條目和文本框條目的形式將數據顯示在窗體中,向「DetailsBox」添加一行並將信息複製到該行的特定列,或者我需要將選定的行從RecordBox複製到DetailsBox。

無論如何,如果某些代碼會有所幫助,只需詢問,但實際上除命令按鈕單擊事件外沒有任何其他功能。

我希望這將是足夠的信息。

回答

3

就這麼簡單

ListBox2.AddItem ListBox1.List(ListBox1.ListIndex) 

隨訪(從評論)

我想我會到行發送到工作表,然後將其添加到從另一個列表框那裏。

我相信你正在使用多列列表框。在這種情況下,上面的代碼只會將第一列添加到第二個列表框。您需要遍歷其餘列以添加Listbox1中的選定行。

假設您的用戶窗體看起來像這樣。我爲你創建了一個小樣本。

enter image description here

和列表框的屬性設置如下

enter image description here

,這是你Sheet1的樣子。

enter image description here

現在把使用這種代碼在用戶窗體。

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

enter image description here

+0

不太適合我。不知道爲什麼...這是一個不太合作的項目。我想我要將該行發送到工作表,然後將其添加到另一個列表框中。 – user2759242

+0

什麼不起作用?你遇到了什麼錯誤?你是否試圖將列列表中的多列行復制到另一列? –

+0

我已經更新了我的帖子。看看,如果這是你想要的... –

0

對於任何一個在看使用循環和多重選擇將項目從一個列表框發送到另一個列表框。下面是一些可能有所幫助的代碼。您需要將兩個列表框的屬性都設置爲Mulitselect。 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 
+0

但是,這種解決方案只適用於10列或更少的列表框。 – Alsatian