问题
I have a workbook containing several sheets each one including a listobject (a table)
My intention is to get data from different list objects and paste it in another listobject. Or more precisely copying several columns of several tables one after the other in other table.
So far I was trying this:
'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)
This does not work.
Reason being that destinationTable.listcolumns(1).databodyrange.item(lastitem)
is not THE range of the last cell of the column, but something else.
I was playing around with range(), .address property etc, read some other stackoverflow questions at no avail.
Could someone help? IN short again, getting the date of a range and paste it from the last column cell in another listobject
I am trying to avoid using .select since selecting is always problematic.
回答1:
Can you wrap in a With and then use the DataBodyRange.Rows.Count
to get the last cell in column? Principle illustrated here:
Sub test()
With ActiveSheet.ListObjects(1).ListColumns(1).DataBodyRange
Debug.Print .Cells(.Rows.Count, 1).Address
End With
End Sub
回答2:
Thanks to @QHarr I got the answer:
With COMMtempTbl.ListColumns(1).DataBodyRange
originTable.ListColumns("comm").DataBodyRange.Copy Destination:=sheets("destination").range(.Cells(.Rows.Count + 1, 1).address)
End With
Explanation. the origin copy range is clear.
the destination range is done by getting the address of the last cell of the column 1 of the destination table. BUT you have to refer it to the corresponing sheet, since the range of an addres would be refered to the active sheet, and not necessary the destination sheet.
In (.Rows.Count + 1, 1) it would be possible to substitute the second 1 by the corresponding column number.
来源:https://stackoverflow.com/questions/52035816/excel-copy-data-from-several-columns-of-listobject-a-tablea-into-one-column-of