Spe*_*azy 2 excel vba excel-vba excel-2010
设置:我有一个带有用于输入数据的表单的Excel文档,该表单的数据输入到表中以便于输入多行数据.至少我是这么认为的.
所以现在我正在尝试选择表格以在适当的位置插入其数据.我认为,我的问题是:我一次选择一个表行,还是整个表格,分别处理每一行.我该怎么做?
我试过Sheets("Form").Range("dataForm[#ALL]").Select了几个变种而没有效果.
如果我选择整个表格,我需要能够单独处理每一行,如果我单独选择每一行,我需要能够从表格的顶部开始,因为数据必须按顺序排列.
有任何想法吗?
编辑:添加细节.我有一个如上所述的表格,其数据必须插入不同的表格,取决于表格中某些单元格的价值.为便于讨论,我们将命名该单元格类型,它有三个可能的值,如下拉列表中所定义.这些价值观是收入,支出和转移.根据这些值,我们决定将数据添加到哪个表中.收入表费用收入等费用等
所以我要做的是选择尽可能多的行,并将每个行插入正确的表中.排序比我解释的要复杂一些,但如果我能找出初始排序,那么将它排序几次应该很简单.
这应该有助于回答您的问题.
Sub TableStuff()
Dim lo As Excel.ListObject
Dim loRow As Excel.ListRow
Dim i As Long
Set lo = ActiveSheet.ListObjects(1)
With lo
'this is the address of the whole table
Debug.Print .Range.Address
For i = 1 To 10
Set loRow = .ListRows.Add(i)
loRow.Range.Cells(1).Value = "test" & i
Next i
Debug.Print .Range.Address
'address of data rows
Debug.Print .DataBodyRange.Address
End With
End Sub
Run Code Online (Sandbox Code Playgroud)
我的博客上有两篇关于桌子的帖子.一个最近的一个也可能提供一些见解.
编辑:根据以下评论编辑OP:
假设Activesheet,tblSource和tblIncome上有两个表.它将源表过滤为Income,副本复制可见行并在tblIncome结束时插入它们.最后,它删除源行(除了一行外).
您需要添加一个循环以使其适用于其他两个类别:
Sub MoveTableStuff()
Dim loSource As Excel.ListObject
Dim loTarget As Excel.ListObject
Dim SourceDataRowsCount As Long
Dim TargetDataRowsCount As Long
Set loSource = ActiveSheet.ListObjects("tblSource")
Set loTarget = ActiveSheet.ListObjects("tblIncome")
With loSource
.Range.AutoFilter Field:=1, Criteria1:="income"
SourceDataRowsCount = .ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Count
End With
With loTarget
TargetDataRowsCount = .DataBodyRange.Rows.Count
.Resize .Range.Resize(.Range.Rows.Count + SourceDataRowsCount, .Range.Columns.Count)
loSource.DataBodyRange.SpecialCells(xlCellTypeVisible).Copy
.DataBodyRange.Cells(TargetDataRowsCount + 1, 1).PasteSpecial (xlPasteValues)
Application.CutCopyMode = False
End With
With loSource
.Range.AutoFilter
.DataBodyRange.Offset(1).Resize(.DataBodyRange.Rows.Count - 1, .DataBodyRange.Columns.Count).Rows.Delete
End With
End Sub
Run Code Online (Sandbox Code Playgroud)