templates - varias - macro para cambiar nombre de hojas excel
¿Cómo copiar hojas a otro libro usando vba? (8)
Entonces, lo que quiero hacer, en general, es hacer una copia de un libro de trabajo. Sin embargo, el libro de trabajo de origen ejecuta mis macros, y quiero que haga una copia idéntica de sí mismo, pero sin las macros. Siento que debería haber una forma sencilla de hacer esto con VBA, pero aún no lo he encontrado. Estoy considerando copiar las hojas una por una al nuevo libro de trabajo, que crearé. ¿Cómo haría esto? ¿Hay alguna manera mejor?
Alguien en Ozgrid respondió una pregunta similar. Básicamente, simplemente copie cada hoja de una en una desde Workbook1 a 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
Descargo de responsabilidad: no he probado este código y en su lugar simplemente adopté el ejemplo vinculado a su problema. Si nada más, debería llevarlo hacia su solución intencionada.
Intenta esto en su lugar.
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Copy
Next
Me gustaría reescribir un poco la respuesta de 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
Editar: También puede crear una matriz de nombres de hojas y copiarlos a la vez.
Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
After:=wb.Sheets(wb.sheets.count)
Nota : copiar una hoja de un XLS? a un XLS dará lugar a un error. Lo opuesto funciona bien (XLS a XLSX)
Podrías guardar como Xlsx. Luego perderá las macros y generará un nuevo libro de trabajo con un poco menos de trabajo.
ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
Pude copiar todas las hojas de un libro de trabajo que tenía una aplicación vba en ejecución, en un nuevo libro de trabajo sin macros de la aplicación, con:
ActiveWorkbook.Sheets.Copy
Simplemente puedes escribir
Worksheets.Copy
en lugar de correr un ciclo. Por defecto, la colección de hojas de trabajo se reproduce en un nuevo libro.
Está comprobado que funciona en la versión 2010 de XL.
Suponiendo que todas sus macros están en módulos, tal vez este enlace ayude. Después de copiar el libro, simplemente itere sobre cada módulo y elimínelo
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