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