Код Excel VBA для копирования нескольких диапазонов на конкретный лист в другой книге - PullRequest
0 голосов
/ 22 ноября 2018

Я нашел здесь некоторый код, который копирует мои данные на другой лист, который работает нормально.Я пытаюсь расширить его, чтобы он копировался в другую рабочую книгу и конкретную рабочую таблицу.

Sub Put_Data()
Dim lastrowDB As Long, lastrow As Long
Dim arr1, arr2, i As Integer

With Sheets("GasMe18-19")
    lastrowDB = .Cells(.Rows.Count, "A").End(xlUp).row + 1
End With

arr1 = Array("A", "G", "H", "L")
arr2 = Array("Q", "R", "S", "T")

For i = LBound(arr1) To UBound(arr1)
    With Sheets("GasMe18-19")
         lastrow = Application.Max(4, .Cells(.Rows.Count,   arr1(i)).End(xlUp).row)
         .Range(.Cells(4, arr1(i)), .Cells(lastrow, arr1(i))).Copy
         Sheets("Sheet1").Range(arr2(i) & 2).PasteSpecial xlPasteValues
    End With
Next
Application.CutCopyMode = False
End Sub

Как это можно изменить, чтобы поместить диапазоны данных в другую рабочую книгу?Я положил Sheet1 в домашнюю рабочую книгу, и все выглядит хорошо, и мне нравится существующая база кода.Исходный Workbook.Worksheet содержит 4 столбца данных, которые я добавляю каждые несколько дней.Затем я копирую и вставляю в другой Workbook2.WorkSheet2 для черчения.Я предпочитаю копировать все из строки 4 в последнюю строку данных для 4 столбцов.

1 Ответ

0 голосов
/ 22 ноября 2018

Вам необходимо указать свой диапазон с рассматриваемой книгой

Dim wbSource As Workbook, wbTarget As Workbook
Set wbSource = ThisWorkbook
Set wbTarget = Workbooks("TheTargetWBName")

...

For i = LBound(arr1) To UBound(arr1)
    With wbSource.Worksheets("GasMe18-19")
         lastrow = Application.Max(4, .Cells(.Rows.Count, arr1(i)).End(xlUp).Row)
         .Range(.Cells(4, arr1(i)), .Cells(lastrow, arr1(i))).Copy
         wbTarget.Worksheets("Sheet1").Range(arr2(i) & 2).PasteSpecial xlPasteValues
    End With
Next

Обратите внимание, что строка sheets("Sheet1").Range(arr2(i) & 2).PasteSpecial xlPasteValues теперь полностью квалифицирована с целевой книгой, используя ранее объявленную переменную wsTarget.Сначала для этой переменной было задано имя рабочей книги с использованием строки:

Set wbTarget = Workbooks("TheTargetWBName")

Если целевая рабочая книга не открыта, вы просто изменили бы ее на

Set wbTarget = Workbooks.Open("TheTargetWBName")
.
...