Копировать список 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