Как скопировать листы в другую книгу с помощью 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