VBA Макросы: Выгрузка в Excel выделенных элементов List Box.

Автор skv-fin, 07 августа 2018, 16:29

skv-fin

Есть форма, в которой есть ListBox. Есть возможность выбора нескольких пунктов в ListBox.
Как сделать так, чтобы в Excel была выгрузка выбранных в ListBox пунктов?

Как выгрузить выделенные элементы в ячейку В2 я знаю. Но мне необходимо, чтобы каждый выделенный элемент в ListBox выгружался в Excel в отдельную ячейку.
Например, в ListBox выделил филиал №1, №2 и №5. На форме нажал на кнопу ОК.
После чего хотелось бы, что в Excel филиал №1 выгрузился бы в ячейку А1, филиал №2 выгрузился бы в ячейку А2, филиал №5 выгрузился бы в ячейку А3.

Код в форме выглядит следующим образом:
Код
Private Sub UserForm_Initialize()
' Загрузка филиалов в форму.
Sheets("Справочник").Select
Dim Диапазон As Range
Set Диапазон = Range("A2").CurrentRegion
ListBox1.RowSource = Диапазон.Address
ListBox1.MultiSelect = fmMultiSelectMulti
End Sub

Private Sub CommandButton1_Click()
' Выгрузка филиалов в Excel.
Dim n As Long
Dim i As Integer
Dim Список As String
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
Список = Список + ListBox1.List(i)
End If
Next
Range("B1").Value = Список
End Sub
[свернуть]

Администратор

Код
Private Sub CommandButton1_Click()
' Выгрузка филиалов в Excel.
Dim n As Long
Dim i As Integer
Dim Список() As String, r As Long
' Создание в массиве ячеек. Ячеек создаём максимально возможное кол-во,
    ' т.к. заранее не известно, сколько юзер выбрал пунктов.
    ' И создаём один столбец, чтобы можно было вставить в эксель одним действием.
ReDim Список(1 To Me.ListBox1.ListCount, 1 To 1)
For i = 0 To ListBox1.ListCount - 1
If ListBox1.Selected(i) Then
    ' Переход на следующую строку в массиве 'Список'.
    r = r + 1
    ' Запись пункты в массив.
    Список(r, 1) = ListBox1.List(i)
End If
Next
' Вставка данных на эксель-лист.
Range("B1").Resize(r).Value = Список()
End Sub
[свернуть]


Администратор