将数据从列表框移动到工作表
Moving data from a listbox to a worksheet
我需要你的帮助将数据从列表框移动到工作表。
此列表框包含 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
***************** 2019 年 1 月 15 日更新 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
不太清楚你是如何设置目标单元格的,无论如何你可以试试这个(按照你的示例逻辑):
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
注意:如果目标范围小于数组,则仅复制该数量的数据,其余部分将被忽略。
我终于找到了解决我问题的代码
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
我需要你的帮助将数据从列表框移动到工作表。 此列表框包含 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
***************** 2019 年 1 月 15 日更新 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
不太清楚你是如何设置目标单元格的,无论如何你可以试试这个(按照你的示例逻辑):
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
注意:如果目标范围小于数组,则仅复制该数量的数据,其余部分将被忽略。
我终于找到了解决我问题的代码
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