Перемещение данных из списка на рабочий лист - PullRequest
0 голосов
/ 14 января 2019

Мне нужна ваша помощь при перемещении данных из списка на лист. Этот список содержит 14 столбцов. Как я могу скопировать строки из списка на лист?

Sub Post ()

    Dim arr
    Dim cnt As Integer
    cnt = ListBox1.ListCount
    arr = ListBox1.List

    With Sheets("DATABASE").ListObjects(1)
      .ListRows.Add
      .DataBodyRange.Cells(.ListRows.Count, 1).Resize(cnt, 14) = arr
    End With
    ListBox1.clear 

End Sub

***************** Обновление 15-01-2019 17:30 ********************* * я нашел этот код, но он перемещается на 1 строку ниже, как на картинке ниже

Private Sub CommandButton2_Click()
Dim i As Long
For i = 0 To ListBox1.ListCount
For x = 1 To 14
Sheets("Database").Range("B2").End(xlDown).Offset(i + 1, x - 1) = 
ListBox1.List(i, x - 1) 'ListBoxl.List(i, x)
Next x
Next i
End Sub

Pic

Ответы [ 2 ]

0 голосов
/ 16 января 2019

наконец я нашел код, который решил мою проблему

Private Sub CommandButton1_Click()
Dim lngItem As Long

For lngItem = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(lngItem) Then
        With Sheets(1) '< qualify sheet here
            .Cells(.Rows.Count, "B").End(xlUp).Offset(1).Value = 
  ListBox1.List(lngItem, 1)
            .Cells(.Rows.Count, "C").End(xlUp).Offset(1).Value = 
 ListBox1.List(lngItem, 2)
        End With
    End If
  Next lngItem

  'Unload Me
  End Sub
0 голосов
/ 14 января 2019

Не очень понятно, как вы устанавливаете целевую ячейку, в любом случае вы можете попробовать это (следуя логике вашего примера):

Dim Trg as Range

With Sheets("DATABASE").ListObjects(1)
     Set Trg = .DataBodyRange.Cells(.ListRows.Count, 1)
End With
Trg.Resize(UBound(arr, 1), UBound(arr, 2)) = arr

Легко вставить содержимое массива в диапазон, если вы можете заранее указать верхнюю левую ячейку и нижнюю правую ячейку целевого диапазона, так что вы можете сказать

Range("B8:E16") = arr

Если вы знаете только верхнюю левую ячейку и хотите динамически установить размер целевого диапазона, используйте .Resize, например:

Range("B8").Resize(UBound(arr, 1), UBound(arr, 2)) = arr

NB. Если целевой диапазон меньше массива, то копируется только этот объем данных, остальное пропускается.

...