将所有内容从列表框(可变行,常量列)复制到单击按钮时 table (VBA)
copy all contents from listbox (variable rows, constant columns) to to table at button click (VBA)
我有一个用户表单,用户可以在其中从各种其他表单控件(文本框、组合框等)填充列表框。每个数据条目将填充 8 列。这个想法是用户将输入数据条目(可能是同一类别条目中的子条目,因此需要能够查看整个批次的功能(或 类别)列表框中的条目),检查输入,如果检查出来,单击一个按钮以将数据提交到 table(这是数据处理模式的基础,吐出图表,等基于输入数据批次)。
所以我想编写以下程序:
- 代码在主 table 中找到下一个空行,并复制列表框的全部内容以从此处交换 table 中的相应单元格。因此每次条目将是 8 列(A-H 列)和 X 行。
我尝试了从网上改编的多种不同代码,但总是出现错误或只能复制第一个条目。
这是我尝试的最后一个代码示例:
Private Sub cmdEnter_Click()
Dim LastRow As Range
Dim ProjectsTable As ListObject
Dim i As Long
Sheets("Project data").ListObjects("Projects").ListRows.Add
'Enter data from form into our new row
Set ProjectsTable = Sheets("Project data").ListObjects("Projects")
Set LastRow = ProjectsTable.ListRows(ProjectsTable.ListRows.Count).Range
With Sheets("Project data")
For i = 0 To ListBox1.ListCount - 1
.Cells(LastRow, 1) = ListBox1.Column(i, 0)
.Cells(LastRow, 2) = ListBox1.Column(i, 1)
.Cells(LastRow, 3) = ListBox1.Column(i, 2)
.Cells(LastRow, 4) = ListBox1.Column(i, 3)
.Cells(LastRow, 5) = ListBox1.Column(i, 4)
.Cells(LastRow, 6) = ListBox1.Column(i, 5)
.Cells(LastRow, 7) = ListBox1.Column(i, 6)
.Cells(LastRow, 8) = ListBox1.Column(i, 7)
Next i
End With
End Sub
谁能帮我找到解决方案?如果有任何指点,我将不胜感激。
解决方案:
Private Sub cmdEnter_Click()
Dim ProjectsTable As ListObject
Dim LastRow As Range
Sheets("Project data").ListObjects("Projects").ListRows.Add
'Enter data from form into our new row
Set ProjectsTable = Sheets("Project data").ListObjects("Projects")
Set LastRow = ProjectsTable.ListRows(ProjectsTable.ListRows.Count).Range
LastRow.Resize(ListBox1.ListCount, ListBox1.ColumnCount).Value = ListBox1.List
End Sub
归功于@Nathan_Sav。非常感谢!
像这样
Range("a1").Resize(Me.lstTabsAvailable.ListCount, Me.lstTabsAvailable.ColumnCount).Value = Me.lstTabsAvailable.List
我有一个用户表单,用户可以在其中从各种其他表单控件(文本框、组合框等)填充列表框。每个数据条目将填充 8 列。这个想法是用户将输入数据条目(可能是同一类别条目中的子条目,因此需要能够查看整个批次的功能(或 类别)列表框中的条目),检查输入,如果检查出来,单击一个按钮以将数据提交到 table(这是数据处理模式的基础,吐出图表,等基于输入数据批次)。
所以我想编写以下程序: - 代码在主 table 中找到下一个空行,并复制列表框的全部内容以从此处交换 table 中的相应单元格。因此每次条目将是 8 列(A-H 列)和 X 行。
我尝试了从网上改编的多种不同代码,但总是出现错误或只能复制第一个条目。
这是我尝试的最后一个代码示例:
Private Sub cmdEnter_Click()
Dim LastRow As Range
Dim ProjectsTable As ListObject
Dim i As Long
Sheets("Project data").ListObjects("Projects").ListRows.Add
'Enter data from form into our new row
Set ProjectsTable = Sheets("Project data").ListObjects("Projects")
Set LastRow = ProjectsTable.ListRows(ProjectsTable.ListRows.Count).Range
With Sheets("Project data")
For i = 0 To ListBox1.ListCount - 1
.Cells(LastRow, 1) = ListBox1.Column(i, 0)
.Cells(LastRow, 2) = ListBox1.Column(i, 1)
.Cells(LastRow, 3) = ListBox1.Column(i, 2)
.Cells(LastRow, 4) = ListBox1.Column(i, 3)
.Cells(LastRow, 5) = ListBox1.Column(i, 4)
.Cells(LastRow, 6) = ListBox1.Column(i, 5)
.Cells(LastRow, 7) = ListBox1.Column(i, 6)
.Cells(LastRow, 8) = ListBox1.Column(i, 7)
Next i
End With
End Sub
谁能帮我找到解决方案?如果有任何指点,我将不胜感激。
解决方案:
Private Sub cmdEnter_Click()
Dim ProjectsTable As ListObject
Dim LastRow As Range
Sheets("Project data").ListObjects("Projects").ListRows.Add
'Enter data from form into our new row
Set ProjectsTable = Sheets("Project data").ListObjects("Projects")
Set LastRow = ProjectsTable.ListRows(ProjectsTable.ListRows.Count).Range
LastRow.Resize(ListBox1.ListCount, ListBox1.ColumnCount).Value = ListBox1.List
End Sub
归功于@Nathan_Sav。非常感谢!
像这样
Range("a1").Resize(Me.lstTabsAvailable.ListCount, Me.lstTabsAvailable.ColumnCount).Value = Me.lstTabsAvailable.List