Come copiare fogli su un’altra cartella di lavoro usando vba?

Quindi, quello che voglio fare, in genere, è fare una copia di una cartella di lavoro. Tuttavia, la cartella di lavoro di origine sta eseguendo i miei macro e voglio creare una copia identica di se stessa, ma senza i macro. Mi sento come se ci fosse un modo semplice per farlo con VBA, ma devo ancora trovarlo. Sto considerando di copiare i fogli uno alla volta nella nuova cartella di lavoro, che creerò. Come lo farei? C’è un modo migliore?

Qualcuno a Ozgrid ha risposto a una domanda simile. Fondamentalmente, basta copiare ciascun foglio uno alla volta da 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 

Dichiarazione di non responsabilità: non ho provato questo codice e invece ho appena adottato l’esempio collegato al tuo problema. Se non altro, dovrebbe guidarti verso la soluzione che intendi.

Vorrei riscrivere leggermente la risposta di 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 

Modifica: puoi anche creare una serie di nomi di fogli e copiarli contemporaneamente.

 Workbooks("source workbook").Worksheets(Array("sheet1","sheet2")).Copy _ After:=wb.Sheets(wb.sheets.count) 

È ansible salvare come xlsx. Quindi perderai i macro e genererai una nuova cartella di lavoro con un po ‘meno lavoro.

 ThisWorkbook.saveas Filename:=NewFileNameWithPath, Format:=xlOpenXMLWorkbook 

Sono stato in grado di copiare tutti i fogli in una cartella di lavoro con un’app vba in esecuzione, in una nuova cartella di lavoro senza i macro dell’app, con:

 ActiveWorkbook.Sheets.Copy 

Supponendo che tutte le tue macro siano in moduli, forse questo link ti aiuterà. Dopo aver copiato la cartella di lavoro, basta scorrere su ciascun modulo ed eliminarla

Prova questo invece.

 Dim ws As Worksheet For Each ws In ActiveWorkbook.Worksheets ws.Copy Next 

Puoi semplicemente scrivere

 Worksheets.Copy 

invece di fare un ciclo. Per impostazione predefinita, la raccolta del foglio di lavoro viene riprodotta in una nuova cartella di lavoro.

È dimostrato che funziona nella versione 2010 di 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