Comment copier des feuilles dans un autre classeur en utilisant vba?
Donc, ce que je veux faire, en général, est de faire une copie d'un classeur. Cependant, le classeur source exécute mes macros, et je veux qu'il fasse une copie identique de lui-même, mais sans les macros. Je pense qu'il devrait y avoir un moyen simple de faire ça avec VBA, mais je dois encore le trouver. J'envisage de copier les feuilles une par une dans le nouveau classeur, que je vais créer. Comment puis-je faire? Est-il un meilleur moyen?
8 réponses
Quelqu'un Ozgrid répondu à une question similaire. En gros, vous n'avez qu'à copier chaque feuille une à la fois de 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
Disclaimer: Je n'ai pas essayé ce code et au lieu de cela j'ai juste adopté l'exemple lié à votre problème. Si rien d'autre, il devrait vous conduire à votre solution.
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: vous pouvez aussi construire un tableau de noms de feuilles et les copier immédiatement.
Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
After:=wb.Sheets(wb.sheets.count)
vous pourriez sauver xlsx. Ensuite, vous perdrez les macros et de générer un nouveau classeur avec un peu moins de travail.
ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
j'ai pu copier toutes les feuilles dans un classeur qui avait une application vba en cours d'exécution, vers un nouveau classeur avec les macros de l'application, avec:
ActiveWorkbook.Sheets.Copy
Essayez ceci à la place.
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Copy
Next
Vous pouvez simplement écrire
Worksheets.Copy
au lieu de lancer un cycle. Par défaut, la feuille de travail est reproduite dans un nouveau cahier.
il est prouvé qu'il fonctionne dans la version 2010 de 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