Подтвердить что ты не робот

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

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

4b9b3361

Ответ 1

Кто-то на 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

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

Ответ 2

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

Ответ 3

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

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

Ответ 4

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

ActiveWorkbook.Sheets.Copy

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

 
Worksheets.Copy

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

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

Ответ 8

    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

Ответ 9

Попробуйте это, возможно, это поможет

ActiveWorkbook.SaveAs Filename:=NewFileName, FileFormat:=xlOpenXMLWorkbook