Как скопировать листы в другую книгу с помощью VBA? - PullRequest
21 голосов
/ 28 июля 2011

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

Ответы [ 8 ]

48 голосов
/ 29 июля 2011

Я бы хотел немного переписать ответ 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

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

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

Примечание : копирование листа из XLS?к XLS приведет к ошибке.Наоборот работает отлично (XLS в XLSX)

29 голосов
/ 28 июля 2011

Кто-то из Озгрид ответил на аналогичный вопрос.По сути, вы просто копируете каждый лист по одному из 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

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

12 голосов
/ 29 июля 2011

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

ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
5 голосов
/ 28 февраля 2014

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

ActiveWorkbook.Sheets.Copy
2 голосов
/ 17 февраля 2015

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

Worksheets.Copy

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

Доказано, что она работает в версии XL 2010 года.

2 голосов
/ 18 января 2013

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

Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
    ws.Copy
Next
2 голосов
/ 28 июля 2011

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

0 голосов
/ 22 февраля 2013
    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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...