Excel VBA Макросы: Создание нового листа в другом файле, копирование данных из одного файла в другой.

Автор Посетитель, 09 мая 2019, 17:51

Посетитель

Во вложении два файла: Book1 - из этого файла с листа Invoices копируем. Book2 - в этом файле создаём новый лист и на этот лист нужно вставить данные.
Во время запуска макроса оба файла открыты.
Мне нужно поправить макрос, который уже копирует.

Не знаю, как указать название листа, куда копировать. Название каждый раз разное. Все зависит от ячейки Е5 в Book1.

Ошибка в этой строке:
    Sheets(Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("E5")).Select

Макрос
Sub AddCopy()

    Windows("Book1").Activate
    Sheets("Invoices").Select
    Cells.Select
    Selection.Copy
    Windows("Book2.xlsm").Activate
   
    Sheets.Add(Before:=Worksheets("Sold-to for report")).Name = Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("E5")
   
    Sheets(Workbooks("Book1.xlsm").Worksheets("Sheet1").Range("E5")).Select
    Cells.Select
    ActiveSheet.Paste
    Windows("Book1.xlsm").Activate
    Sheets("Sheet1").Select
    Range("A1").Select

End Sub
[свернуть]

[вложение удалено администратором]

Администратор

Макрос
Sub AddCopy()

    Dim bk_src As Workbook, bk_res As Workbook, sh_res As Worksheet
   
   
    ' Присваиваем имена файлам, с которыми надо работать.
    Set bk_src = Workbooks("Book1.xlsm")
    Set bk_res = Workbooks("Book2.xlsm")

    ' Создаём в файле-результате лист и присваиваем листу vba-имя "sh_res".
    Set sh_res = bk_res.Worksheets.Add(Before:=bk_res.Worksheets("Sold-to for report"))
   
    ' Присваиваем новому листу имя.
    sh_res.name = bk_src.Worksheets("Sheet1").Range("E5").Value
   
    ' Вставляем на новый лист данные.
    ' Копируем все ячейки листа "Invoices".
    bk_src.Worksheets("Invoices").Cells.Copy
    ' Вставляем данные на лист-результат.
    sh_res.Paste
   
    ' Если нужно, переходим в нужный файл, на нужный лист, в нужную ячейку.
        ' Возможно это не потребуется сделать, если только убрать последствия копирования -
        ' после копирования могут быть выделены ячейки.
    Application.Goto bk_src.Worksheets("Sheet1").Range("A1"), True
   
End Sub
[свернуть]