Quando si organizzano i dati nelle cartelle di lavoro, non è raro copiare fogli di lavoro da una cartella di lavoro a un’altra. In effetti, il comando Sposta o Copia foglio (visibile quando fai clic con il pulsante destro del mouse su una scheda del foglio di lavoro) è uno che uso abbastanza spesso e sarei disposto a scommettere che altri lo usino altrettanto spesso.

Come si copiano quindi i fogli di lavoro all’interno di una macro? La risposta è utilizzare il metodo Copia con un singolo foglio di lavoro o un gruppo di fogli di lavoro.

Ad esempio, il seguente codice macro copierà il foglio di lavoro attualmente selezionato in una nuova cartella di lavoro:

ActiveSheet.Copy

Questo è tutto; una singola riga è tutto ciò che è necessario per copiare il foglio di lavoro in una nuova cartella di lavoro senza nome. Dopo aver eseguito la riga, viene selezionata la nuova cartella di lavoro ed è possibile salvarla utilizzando un codice simile al seguente. La prima riga del codice salva la cartella di lavoro e la seconda la chiude.

ActiveWorkbook.SaveAs Filename:="MyNewFile.xlsm", _   FileFormat:=xlOpenXMLWorkbookMacroEnabled ActiveWindow.Close

Se vuoi copiare un foglio specifico in un’altra cartella di lavoro, lo fai specificando il nome del foglio che vuoi copiare, invece di usare l’oggetto ActiveSheet:

Sheets("Sheet1").Copy

Questo esempio copia il foglio di lavoro denominato Sheet1, dalla raccolta Fogli, in una nuova cartella di lavoro. È quindi possibile salvare la nuova cartella di lavoro, come già discusso.

Il metodo Copia, se utilizzato con i fogli di lavoro, non si limita a copiare un singolo foglio alla volta. Se hai selezionato un gruppo di fogli, puoi comunque utilizzare una singola riga di comando per copiarli tutti in una nuova cartella di lavoro.

Questo è ciò che viene fatto in questa macro:

Sub CopyWorkbook()

Dim sCopyName As String

sCopyName = "My New Workbook.xlsm"



SelectedSheets.Copy     ActiveWorkbook.SaveAs Filename:=sCopyName, _       FileFormat:=xlOpenXMLWorkbookMacroEnabled End Sub

Notare l’uso del comando Copia. La macro funzionerà se hai selezionato un foglio di lavoro o cinquanta; non importa. Se vuoi copiare tutti i fogli di lavoro da una cartella di lavoro a un’altra, tutto ciò che devi fare è apportare una singola modifica nella macro, alla riga in cui viene richiamato il metodo Copia:

Sheets.Copy

Questa copia l’intera raccolta Fogli, che consiste di tutti i fogli di lavoro nella cartella di lavoro.

Va notato che il metodo Copia non è solo per copiare fogli di lavoro in una nuova cartella di lavoro; può anche essere utilizzato per copiare fogli di lavoro all’interno della stessa cartella di lavoro. L’unica cosa che devi fare è specificare dove vuoi fare la copia nella cartella di lavoro corrente:

ActiveSheet.Copy After:=Sheets("Sheet7")

Questa riga di codice copia il foglio di lavoro attivo nella stessa cartella di lavoro in modo che venga visualizzato dopo il foglio di lavoro denominato Sheet7. Se è più appropriato alle tue esigenze, potresti invece specificare il foglio di lavoro prima del quale deve essere posizionata la copia:

ActiveSheet.Copy Before:=Sheets("Sheet7")

In questo modo il foglio di lavoro viene inserito prima di Sheet7 anziché dopo di esso.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (11856) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: