Excel将数据从列表对象A(tableA)的几列复制到另一列的列表对象B(tableB)中

时间:2018-08-27 08:59:00

标签: excel vba excel-vba listobject

我有一个工作簿,其中包含几张纸,每张纸都包含一个列表对象(一个表)

我的目的是从不同的列表对象中获取数据并将其粘贴到另一个列表对象中。或者更准确地说,是在另一个表中一个接一个地复制几个表的几列。

到目前为止,我正在尝试:

'defining the names of the list objects
Dim OriginTable As ListObject
Set OriginTable = ThisWorkbook.Sheets("claims").ListObjects(1)
Dim destinationTable  As ListObject
Set destinationTable = ThisWorkbook.Sheets("COMM").ListObjects(1)

'inserting one row in case the table is empty.
If destinationTabl.ListColumns(1).DataBodyRange Is Nothing Then
    destinationTabl.ListRows.Add
End If

lastItem = destinationTable.ListColumns(1).DataBodyRange.Count+1
MsgBox ("I am going to insert in: ", lastItem)
originTable.ListColumns("comm").DataBodyRange.Copy Destination:=destinationTable.listcolumns(1).databodyrange.item(lastitem)

这不起作用。 原因是destinationTable.listcolumns(1).databodyrange.item(lastitem)不是列最后一个单元格的范围,而是其他内容。

我在玩range()、. address属性等,无济于事地阅读了一些其他stackoverflow问题。

有人可以帮忙吗? 简而言之,获取范围的日期并将其从另一个列表对象的最后一个列单元格中粘贴

我试图避免使用.select,因为选择总是有问题的。

2 个答案:

答案 0 :(得分:0)

您可以包装一个With,然后使用DataBodyRange.Rows.Count来获取列中的最后一个单元格吗?原理图如下:

Sub test()
    With ActiveSheet.ListObjects(1).ListColumns(1).DataBodyRange
        Debug.Print .Cells(.Rows.Count, 1).Address
    End With
End Sub

答案 1 :(得分:0)

由于@QHarr,我得到了答案:

With COMMtempTbl.ListColumns(1).DataBodyRange
originTable.ListColumns("comm").DataBodyRange.Copy Destination:=sheets("destination").range(.Cells(.Rows.Count + 1, 1).address)
End With

说明。 原始副本范围很清楚。

通过获取目标表第1列的最后一个单元格的地址来完成目标范围。但是您必须将其引用到相应的工作表中,因为地址的范围将引用到活动工作表中,而不必引用目标工作表。

在(.Rows.Count + 1,1)中,可以用相应的列号替换第二个1。