Sommario
L'esercitazione fornisce una raccolta di macro per duplicare i fogli in Excel: copiare e rinominare in base al valore della cella, copiare più fogli, copiare un foglio di lavoro attivo in un altro file senza aprirlo e altro ancora.
Copiare manualmente i fogli in Excel è piuttosto rapido e semplice... se eseguito solo una o due volte. Duplicare più volte i fogli è noioso e richiede molto tempo. In questa pagina troverete una serie di macro utili per automatizzare questa operazione.
Excel VBA per copiare un foglio in una nuova cartella di lavoro
Questa semplicissima macro di una riga fa esattamente ciò che suggerisce il nome: copia il foglio attivo in una nuova cartella di lavoro.
Public Sub CopySheetToNewWorkbook() activeSheet.Copy End SubCopiare più fogli in Excel con VBA
Se si desidera copiare diversi fogli dalla cartella di lavoro attiva a una nuova cartella, selezionare tutti i fogli di lavoro di interesse ed eseguire questa macro:
Public Sub CopySelectedSheets() ActiveWindow.SelectedSheets.Copy End SubExcel VBA per copiare un foglio in un'altra cartella di lavoro
A seconda della posizione in cui si desidera inserire il foglio copiato, utilizzare una delle seguenti macro.
Copiare un foglio all'inizio di un'altra cartella di lavoro
Questa macro copia il foglio attivo prima di tutti gli altri fogli di lavoro nel file di destinazione, Libro1 Per copiare in un altro file, sostituire "Book1.xlsx" con il nome completo della cartella di lavoro di destinazione.
Public Sub CopySheetToBeginningAnotherWorkbook() activeSheet.Copy Before:=Workbooks( "Book1.xlsx" ).Sheets(1) End SubCopiare un foglio alla fine di un'altra cartella di lavoro
Questo pezzo di codice duplica il foglio di lavoro attivo e posiziona la copia alla fine di Libro1 Anche in questo caso, ricordarsi di sostituire "Book1.xlsx" con il nome della cartella di lavoro di destinazione.
Public Sub CopySheetToEndAnotherWorkbook() activeSheet.Copy After:=Workbooks( "Book1.xlsx" ).Sheets(Workbooks( "Book1.xlsx" ).Worksheets.Count) End SubNota: affinché le macro funzionino, la cartella di lavoro di destinazione deve essere salvata sul disco rigido o in rete.
Copiare un foglio in una cartella di lavoro selezionata
Per poter copiare il foglio corrente in qualsiasi cartella di lavoro aperta, è possibile creare un UserForm (chiamato UtenteForm1 ) con un ListBox controllo ( denominato ListBox1 ) e due pulsanti:
Quindi, fare doppio clic sul modulo e incollare il codice seguente nella finestra Codice:
Public SelectedWorkbook As String Private Sub UserForm_Initialize() SelectedWorkbook = "" ListBox1.Clear For Each wbk In Application.Workbooks ListBox1.AddItem (wbk.Name) Next End Sub Private Sub CommandButton1_Click() If ListBox1.ListIndex> -1 Then SelectedWorkbook = ListBox1.List(ListBox1.ListIndex) End If Me.Hide End Sub Private Sub CommandButton2_Click() SelectedWorkbook = "" Me.Hide EndSubUna volta creato UserForm, è possibile utilizzare una delle seguenti macro per copiare il foglio attivo nella cartella di lavoro desiderata.
Copiare il foglio al inizio della cartella di lavoro selezionata :
Public Sub CopySheetToBeginningAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy Before:=Workbooks(UserForm1.SelectedWorkbook).Sheets(1) End If Unload UserForm1 End SubCopiare il foglio al fine della cartella di lavoro selezionata :
Public Sub CopySheetToEndAnotherWorkbook() Load UserForm1 UserForm1.Show If (UserForm1.SelectedWorkbook "" ) Then activeSheet.Copy After:=Workbooks( _ UserForm1.SelectedWorkbook).Sheets( _ Workbooks(UserForm1.SelectedWorkbook). _ Worksheets.Count) End If Unload UserForm1 End SubQuando viene eseguita in Excel, la macro mostra un elenco di tutte le cartelle di lavoro attualmente aperte. Selezionate quella necessaria e fate clic su OK:
Macro di Excel per copiare un foglio e rinominarlo
Quando si copia un foglio in Excel, alla replica viene assegnato un nome nel formato predefinito, come ad esempio Foglio1 (2) Le macro seguenti consentono di evitare di cambiare manualmente il nome predefinito.
Questo codice duplica il foglio di lavoro attivo, assegna alla copia il nome "Foglio di prova" (potete sostituirlo con qualsiasi altro nome) e colloca il foglio copiato alla fine della cartella di lavoro corrente.
Public Sub CopySheetAndRenamePredefined() activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = "Test Sheet" End SubPer consentire all'utente di specificare il nome del foglio copiato , utilizzare questo codice:
Al momento dell'esecuzione, la macro visualizza la seguente casella di input, nella quale si deve digitare il nome desiderato e premere OK:
Macro di Excel per copiare il foglio e rinominarlo in base al valore della cella
In alcune situazioni, può essere più conveniente nominare una copia con un valore specifico di una cella, ad esempio l'intestazione di una colonna. Per questo, è sufficiente prendere il codice precedente e fornire il valore della cella cella attualmente selezionata alla casella di immissione automaticamente. Come nell'esempio precedente, la copia verrà posizionata alla fine della cartella di lavoro attiva.
La parte più difficile sarebbe quella di far sì che gli utenti selezionino sempre la cella corretta prima di eseguire la macro :)
Public Sub CopySheetAndRenameByCell() Dim newName As String On Error Resume Next newName = InputBox( "Enter the name for the copied worksheet" , "Copy worksheet" , ActiveCell.Value) If newName "" Then activeSheet.Copy After:=Worksheets(Sheets.Count) On Error Resume Next activeSheet.Name = newName End If End SubIn alternativa, è possibile codifica l'indirizzo della cella Per denominare il foglio di lavoro copiato in base a un'altra cella, sostituite A1 con un riferimento di cella appropriato.
Public Sub CopySheetAndRenameByCell2() Dim wks As Worksheet Set wks = activeSheet activeSheet.Copy After:=Worksheets(Sheets.Count) If wks.Range( "A1" ).Value "" Then On Error Resume Next activeSheet.Name = wks.Range( "A1" ).Value End If wks.Activate End SubMacro per copiare il foglio di lavoro in una cartella di lavoro chiusa
Questa macro copia il foglio attivo alla fine di una cartella di lavoro chiusa. Il nome di un'altra cartella di lavoro non è specificato nel codice: la macro aprirà la finestra standard di Esplora risorse e consentirà di scegliere qualsiasi file di destinazione:
Dopo aver selezionato il file e fatto clic su Aperto la macro copierà il foglio attivo e chiuderà automaticamente la cartella di lavoro di destinazione.
Public Sub CopySheetToClosedWorkbook() Dim fileName Dim closedBook As Workbook Dim currentSheet As Worksheet fileName = Application.GetOpenFilename( "Excel Files (*.xlsx), *.xlsx" ) If fileName False Then Application.ScreenUpdating = False Set currentSheet = Application.activeSheet Set closedBook = Workbooks. Open (fileName) currentSheet.Copy After:=closedBook.Sheets(closedBook.Worksheets.Count)closedBook. Close ( True ) Application.ScreenUpdating = True End If End SubExcel VBA per copiare un foglio da un'altra cartella di lavoro senza aprirlo
Questa macro consente di copiare un foglio di lavoro da un altro file Excel senza aprirlo. Il foglio copiato verrà inserito alla fine della cartella di lavoro corrente.
Ricordatevi di fare un paio di sostituzioni nel codice:
- C:\Users\XXX\Documents\Target_Book.xlsx deve essere modificato con il percorso e il nome effettivi della cartella di lavoro da cui si desidera copiare un foglio.
- Foglio1 deve essere sostituito con il nome del foglio che si desidera copiare.
VBA di Excel per duplicare il foglio più volte
A volte può essere necessario duplicare lo stesso foglio più di una volta, ad esempio per testare formule diverse sullo stesso insieme di dati. Questo può essere fatto facilmente con la seguente macro.
Public Sub DuplicateSheetMultipleTimes() Dim n As Integer On Error Resume Next n = InputBox( "Quante copie del foglio attivo vuoi fare?" ) If n>= 1 Then For numtimes = 1 To n activeSheet.Copy After:=ActiveWorkbook.Sheets(Worksheets.Count) Next End If End SubAprire il foglio originale, eseguire la macro, specificare il numero di copie del foglio attivo che si desidera creare e fare clic su OK :
Come duplicare i fogli in Excel con VBA
Per copiare un foglio in Excel con una delle macro di cui sopra, potete inserire il codice VBA nel vostro libro o eseguire una macro dalla nostra cartella di lavoro di esempio.
Come aggiungere una macro alla cartella di lavoro
Per inserire il codice nella cartella di lavoro, procedere come segue:
- Aprire il foglio di lavoro che si desidera copiare.
- Premere Alt + F11 per aprire l'editor di Visual Basic.
- Nel riquadro di sinistra, fare clic con il tasto destro del mouse su Questo libro di lavoro e quindi fare clic su Inserire > Modulo .
- Incollare il codice nella finestra Codice.
- Premere F5 per eseguire la macro.
Per le istruzioni dettagliate, vedere Come inserire un codice VBA in Excel.
Come eseguire una macro dalla cartella di lavoro di esempio
In alternativa, potete scaricare la nostra cartella di lavoro di esempio per Duplicare fogli Excel ed eseguire il codice da lì.
La cartella di lavoro di esempio contiene le seguenti macro:
CopiaFoglioSuNuovoLibro - copia il foglio di lavoro corrente in una nuova cartella di lavoro.
CopiaFogliSelezionati - copia più fogli selezionati in una nuova cartella di lavoro.
CopiaFoglioAll'inizioDiUnAltroLibroDiLavoro - copia il foglio attivo all'inizio di un'altra cartella di lavoro.
CopiaFoglioFinoAllaFineDiUnAltroLavoratore - copia il foglio attivo alla fine di un altro file Excel.
CopiaFoglioeRinomina - duplica il foglio corrente, lo rinomina come specificato dall'utente e mette la copia dopo tutti gli altri fogli della cartella di lavoro corrente.
CopiaFoglioeRinominaPredefinito - duplica il foglio attivo, assegna un nome predefinito alla copia e la colloca alla fine della cartella di lavoro corrente.
CopiaFoglioeRinominaPerCella - crea una copia del foglio attivo e la rinomina in base al valore della cella selezionata.
CopiaFoglioeRinominaPerCella2 - copia il foglio attivo e lo rinomina in base all'indirizzo di cella codificato.
CopiaFoglioSuLibroChiuso - consente di copiare un foglio in una cartella di lavoro chiusa.
CopiaFoglioDaLibroChiuso - consente di copiare un foglio da un altro file Excel senza aprirlo.
DuplicaFoglioMultiploTempi - consente di duplicare più volte un foglio in Excel.
Per eseguire la macro in Excel, è sufficiente procedere come segue:
- Aprire la cartella di lavoro scaricata e abilitare il contenuto, se richiesto.
- Aprire la propria cartella di lavoro e spostarsi sul foglio che si desidera copiare.
- Nel foglio di lavoro, premere Alt + F8 , selezionare la macro di interesse e fare clic su Correre .
Ecco come duplicare un foglio in Excel con VBA. Vi ringrazio per la lettura e spero di vedervi sul nostro blog la prossima settimana!