Excel скопирует данные из нескольких столбцов объекта A (таблица A) в один столбец объекта B (таблица B) один за другим - PullRequest
0 голосов
/ 27 августа 2018

У меня есть рабочая книга, содержащая несколько листов, каждый из которых включает в себя объект списка (таблица)

Мое намерение - получить данные из различных объектов списка и вставить их в другой объект списка.Или, точнее, копирование нескольких столбцов нескольких таблиц один за другим в другую таблицу.

Пока я пытался это сделать:

'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 голосов
/ 27 августа 2018

Благодаря @QHarr я получил ответ:

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

Объяснение.диапазон исходной копии свободен.

диапазон назначения определяется путем получения адреса последней ячейки столбца 1 таблицы назначения.НО вы должны ссылаться на соответствующий лист, поскольку диапазон адресов будет ссылаться на активный лист, а не на целевой лист.

In (.Rows.Count + 1, 1)можно было бы заменить второй 1 на соответствующий номер столбца.

0 голосов
/ 27 августа 2018

Можете ли вы заключить в С, а затем использовать DataBodyRange.Rows.Count, чтобы получить последнюю ячейку в столбце?Принцип иллюстрируется здесь:

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