Копировать список VBA в список

Хорошо, это кажется сумасшедшим, и я исследовал это в течение нескольких часов, но я не могу найти ничего, что работает. Этот пост будет довольно лишен кода, но я собираюсь очень быстро объяснить, что именно я пытаюсь сделать.

Итак, у меня есть список, который я успешно заполнил, и он работает просто отлично. В какой-то момент по указанию пользователя, пользователь выберет строку из списка, назовет ее RecordBox, просмотрит некоторую информацию, возможно, добавит ее, а затем нажмет командную кнопку "сохранить". После нажатия этой кнопки сохранения, я хотел бы скопировать выбранную строку из RecordBox во второй список. Назовите это DetailsBox, я полагаю.

Мне либо нужен способ получения данных, отображаемых в форме в виде заголовков, записей в выпадающем списке и записей в текстовом поле, добавление строки в "DetailsBox" и копирование информации в определенные столбцы этой строки, или мне просто нужно скопировать выбранную строку из RecordBox в DetailsBox.

В любом случае, если какой-то код будет полезен, просто спросите, но на самом деле нет ничего, кроме события нажатия кнопки.

Я надеюсь, что этого будет достаточно информации.

2 ответа

Решение

Это так же просто, как

ListBox2.AddItem ListBox1.List(ListBox1.ListIndex)

FOLLOWUP (из комментариев)

Я думаю, что я собираюсь отправить строку на лист, а затем добавить ее в другой список оттуда.

Я полагаю, что вы используете многоколонный список. В этом случае приведенный выше код добавит только первый столбец во 2-й список. Вам нужно перебрать остальные столбцы, чтобы добавить выбранную строку из 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

Для любого, кто смотрит на отправку элементов из одного списка в другой, используя цикл и множественный выбор. Вот код, который может помочь. Вам нужно установить оба списка в свойствах 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
Другие вопросы по тегам