如何选择表格行/完整表格?

Spe*_*azy 2 excel vba excel-vba excel-2010

设置:我有一个带有用于输入数据的表单的Excel文档,该表单的数据输入到表中以便于输入多行数据.至少我是这么认为的.

所以现在我正在尝试选择表格以在适当的位置插入其数据.我认为,我的问题是:我一次选择一个表行,还是整个表格,分别处理每一行.我该怎么做?

我试过Sheets("Form").Range("dataForm[#ALL]").Select了几个变种而没有效果.

如果我选择整个表格,我需要能够单独处理每一行,如果我单独选择每一行,我需要能够从表格的顶部开始,因为数据必须按顺序排列.

有任何想法吗?

编辑:添加细节.我有一个如上所述的表格,其数据必须插入不同的表格,取决于表格中某些单元格的价值.为便于讨论,我们将命名该单元格类型,它有三个可能的值,如下拉列表中所定义.这些价值观是收入,支出和转移.根据这些值,我们决定将数据添加到哪个表中.收入表费用收入等费用等

所以我要做的是选择尽可能多的行,并将每个行插入正确的表中.排序比我解释的要复杂一些,但如果我能找出初始排序,那么将它排序几次应该很简单.

Dou*_*ncy 5

这应该有助于回答您的问题.

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)