Хорошо, так что есть несколько шагов, чтобы получить желаемый результат.
Я предполагаю, что ваша вторая книга еще не открыта, поэтому вам нужно сначала открыть ее в VBA, прежде чем можно будет копировать диапазоны. В SO и Google есть множество ответов, которые покажут вам, как это сделать.
Поскольку вы будете добавлять строки к исходному рабочему листу, вам нужен способ включить это в свой код. Есть несколько вариантов, как это сделать.
Вы можете создать таблицу и использовать Dim As ListObject
для объявления, а затем установить ее в VBA. Таким образом, когда новые строки добавляются в таблицу, они будут автоматически включены. Второй способ - использовать динамический именованный диапазон (см. «Диспетчер имен» на вкладке «Формулы»), который включает новые строки при их добавлении.
Возможно, наиболее важной частью является упрощение кода путем объявления ваших переменных и объектов.
В настоящее время вы пишете wb1.Sheets("dataform")
постоянно. Вместо этого используйте Dim DataForm as Worksheet
и Set Dataform = wb1.Sheets("dataform")
. Таким образом, при использовании адреса вашего листа вы можете просто написать Dataform.Range("A1:A1")
. Смотрите ниже пример.
Dim Source As Workbook
Set Source = ThisWorkbook
Dim Dataform As Worksheet
Set Dataform = Source.Sheets("Dataform")
Dataform.Range("L2:N2").Copy 'See how you can just adress the sheet by name
Теперь, если вы также объявите свои диапазоны как таблицы / именованные диапазоны, это сделает код еще проще для обработки. Поскольку вы также всегда добавляете строку во время каждой операции, гораздо более эффективным способом было бы использовать for each loop
, чтобы просмотреть все ваши именованные диапазоны / таблицы, скопировать их, вставить новую строку в лист назначения и затем вставить.
Надеюсь, это было какое-то вдохновение