У меня есть две таблицы:
Table_1 Table_2
A B C A B C
------------- -------------
1| A1| B1| C1| 1| A2| B2| C2|
2| A1| B1| C1| 2| A2| B2| C2|
3| A1| B1| C1| 3| A2| B2| C2|
Результирующая таблица:
Table_1
A B C
-------------
1| A1| B1| C1|
2| A1| B1| C1|
3| A1| B1| C1|
4| A2| B2| C2|
5| A2| B2| C2|
6| A2| B2| C2|
Table_2 — это временная таблица (ListObject), которая запрашивает записи в базе данных, используя подключение к данным.
Table_1 — это таблица (ListObject), которая действует как коллективный список записей. Он хранится отдельно, потому что (1) сокращает время запроса в Table_2 и (2) имеет некоторые программные изменения.
У меня есть код VBA, который копирует Table_2 в Table_1, а затем обновляет строку подключения для Table_2, чтобы не включать записи с датами в диапазоне Table_1. В результате Table_2 извлекает только новые данные.
Мой код (правильно) копирует данные из Table_2 в Table_1:
For Each temprow in Table_2.ListRows
Set newRow = table_1.ListRows.Add
tempRow.Range.Copy
newRow.Range.PasteSpecial xlPasteValues
Next
Это прекрасно работает, если в Table_2 (новые записи) всего дюжина записей. Иногда в таблице Table_2 будет пара сотен записей, на выполнение которых уходит буквально 20 минут. Я подозреваю, что это потому, что я делаю пару сотен итераций .Copy и .Paste.
Есть ли способ сделать это оптом: скопировать ВСЮ таблицу Table_2 и просто сделать ее частью Table_1? Я чувствую, что то, что я хочу сделать, должно выполняться программно всего за 1 секунду, а не за 20 минут. У меня нет условий или исключений. Я хочу ВСЕ из Table_2, что должно упростить задачу. Я, наверное, делаю это неправильно. Любая помощь приветствуется. Спасибо.