Donc, ce que je veux faire, en général, est de copier un cahier de travail. Toutefois, le classeur source exécute mes macros et je souhaite qu'il en fasse une copie identique, mais sans les macros. Je pense qu'il devrait exister un moyen simple de faire cela avec VBA, mais je ne l'ai pas encore trouvé. J'envisage de copier les feuilles une à une dans le nouveau cahier que je vais créer. Comment je ferais ça? Y a-t-il un meilleur moyen?
Quelqu'un de Ozgrid a répondu à une question similaire. En gros, vous copiez simplement chaque feuille 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
Clause de non-responsabilité: je n'ai pas encore essayé ce code et j'ai simplement adopté l'exemple lié à votre problème. Si rien d'autre, cela devrait vous conduire vers la solution souhaitée.
Je voudrais réécrire légèrement la réponse 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
Modifier: Vous pouvez également créer un tableau de noms de feuilles et le copier en une fois.
Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _
After:=wb.Sheets(wb.sheets.count)
Remarque : copier une feuille à partir d'un fichier XLS? à un XLS entraînera une erreur. Le contraire fonctionne très bien (XLS à XLSX)
Vous pouvez enregistrer As xlsx. Ensuite, vous perdrez les macros et générerez un nouveau classeur avec un peu moins de travail.
ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook
J'ai pu copier toutes les feuilles d'un classeur dans lequel une application vba était en cours d'exécution, dans un nouveau classeur sans les macros de l'application, avec:
ActiveWorkbook.Sheets.Copy
En supposant que toutes vos macros soient dans des modules, peut-être ce lien aidera Après avoir copié le classeur, il suffit de parcourir chaque module et de le supprimer.
Vous pouvez simplement écrire
Worksheets.Copy
au lieu d'exécuter un cycle . Par défaut, la collection de feuilles de calcul est reproduite dans un nouveau classeur.
Il est prouvé qu'il fonctionne dans la version 2010 de XL.
Essayez ceci à la place.
Dim ws As Worksheet
For Each ws In ActiveWorkbook.Worksheets
ws.Copy
Next
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