Как скопировать листы в другую книгу с помощью VBA?

Итак, что я хочу сделать, как правило, сделать копию книги. Однако в исходной книге запущены мои макросы, и я хочу, чтобы она сделала идентичную копию самой себя, но без макросов. Я чувствую, что должен быть простой способ сделать это с VBA, но еще не нашел его. Я рассматриваю возможность копирования листов один за другим в новую книгу, которую я создам. Как мне это сделать? Есть ли лучший способ?

8 ответов


кто-то на Ozgrid ответил на аналогичный вопрос. В принципе, вы просто копируете каждый лист по одному из Workbook1 в Workbook2.

Sub CopyWorkbook()

    Dim currentSheet as Worksheet
    Dim sheetIndex as Integer
    sheetIndex = 1

    For Each currentSheet in Worksheets

        Windows("SOURCE WORKBOOK").Activate 
        currentSheet.Select
        currentSheet.Copy Before:=Workbooks("TARGET WORKBOOK").Sheets(sheetIndex) 

        sheetIndex = sheetIndex + 1

    Next currentSheet

End Sub

отказ от ответственности: я не пробовал этот код и вместо этого просто принял связанный пример вашей проблемы. Если ничего другого, это должно привести вас к предполагаемому решению.


Я хотел бы немного переписать ответ keytarhero:

Sub CopyWorkbook()

Dim sh as Worksheet,  wb as workbook

Set wb = workbooks("Target workbook")
For Each sh in workbooks("source workbook").Worksheets
   sh.Copy After:=wb.Sheets(wb.sheets.count) 
Next sh

End Sub

Edit: вы также можете создать массив имен листов и скопировать его сразу.

Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
         After:=wb.Sheets(wb.sheets.count)

вы можете сохранить xlsx. Затем вы потеряете макросы и создадите новую книгу с немного меньшей работой.

ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook

я смог скопировать все листы в книге, в которой было запущено приложение vba, в новую книгу без макросов приложения с помощью:

ActiveWorkbook.Sheets.Copy

предполагая, что все ваши макросы находятся в модулях, возможно этой ссылке поможет. После копирования книги просто повторите каждый модуль и удалите его


попробуйте это вместо этого.

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    ws.Copy
Next

вы можете просто написать

Worksheets.Copy

вместо запуска цикла. По умолчанию коллекция листов воспроизводится в новой книге.

доказаны, что действует в версии 2010 XL.


    Workbooks.Open Filename:="Path(Ex: C:\Reports\ClientWiseReport.xls)"ReadOnly:=True


    For Each Sheet In ActiveWorkbook.Sheets

        Sheet.Copy After:=ThisWorkbook.Sheets(1)

    Next Sheet