Riepilogo
Come dividere i fogli di un file in tanti nuovi file, uno per ciascun foglio. Due soluzioni: una che elimina il foglio dal file di origine ed una che la mantiene. Excel 2003/2007/2010/2013.
Dettagli
NOTA. Gli esempi ed il codice sono forniti *così come sono* e l’autore declina ogni responsabilità per un loro uso scorretto. Utilizzate gli esempi forniti o file di prova per i vostri test. La correzione delle eccezioni (errori) e il controllo del tipo di dati inserito è solo parziale. I file vogliono essere un semplice esempio che illustra come sia possibile automatizzare Excel e Word e sono forniti solo a scopo dimostrativo.
Situazione.
Abbiamo la necessità di creare nuovi file partendo dai fogli del file dove andremo a posizionare il nostro codice. Ad esempio, questa la situazione di partenza:
Figura 1: Struttura del file di partenza
Vogliamo salvare nella directory C:\Prova tutti i fogli come nuovi file, ad eccezione di Foglio1 e Foglio8, per ottenere quanto riportato nell'immagine qui sotto:
Figura 2: il risultato che vogliamo ottenere
Ecco il codice.
Il codice (abbondantemente commentato) va copia/incollato in un modulo standard. Se non avete mai utilizzato il vb di Excel, vi rimando alla Nota 2) in fondo all'articolo.
Public Sub m()
'dichiaro le variabili
Dim sh As Worksheet
Dim sPath As String
Dim sNome As String
'evito l'aggiormanto del monitor
'che rende visibile ogni singolo passaggio
Application.ScreenUpdating = False
sPath = "C:\Prove\" '<<=== modificate con la path della directory dove volete salvare i file
'ignoro eventuali errori
On Error Resume Next
For Each sh In ThisWorkbook.Worksheets
sNome = sh.Name
Select Case sNome
'in questo esempio non voglio salvare
'come nuovi file i fogli: Foglio1 e Foglio8
Case "Foglio1", "Foglio8" '<<=== Vedi Nota 1)
' non faccio nulla
'per tutti gli altri fogli creo un nuovo file
Case Else
'non voglio siano visualizzati alert
Application.DisplayAlerts = False
'salvo il foglio come nuovo file
'lasciandolo anche nel file originale
sh.Copy '<<=== in questo caso lascio il foglio anche nel file che contiene il codice; vedi Nota 4)
With ActiveWorkbook
.SaveAs sPath & sNome
'chiudo il nuovo file
.Close
End With
End Select
Next
'ripristino l'aggiornamento del monitor
Application.ScreenUpdating = True
Set sh = Nothing
End Sub
NOTE.
1) Il codice va copia/incollato in un modulo standard e va modificato nei nomi dei fogli dai quali eventualmente NON vogliamo creare nuovi file. Nel caso vogliate creare file di TUTTI i fogli del file, sostituite:
For Each sh In ThisWorkbook.Worksheets
sNome = sh.Name
Select Case sNome
'in questo esempio non voglio salvare
'come nuovi file i fogli: Foglio1 e Foglio8
Case "Foglio1", "Foglio8"
'
'per tutti gli altri fogli creo un nuovo file
Case Else
'non voglio siano visualizzati alert
Application.DisplayAlerts = False
'salvo il foglio come nuovo file
'lasciandolo anche nel file originale
sh.Copy
With ActiveWorkbook
.SaveAs sPath & sNome
'chiudo il nuovo file
.Close
End With
End Select
Next
con:
For Each sh In ThisWorkbook.Worksheets
sNome = sh.Name
'non voglio siano visualizzati alert
Application.DisplayAlerts = False
'salvo il foglio come nuovo file
'lasciandolo anche nel file originale
sh.Copy '<<=== in questo caso lascio il foglio anche nel file che contiene il codice; vedi Nota 4)
With ActiveWorkbook
.SaveAs sPath & sNome
'chiudo il nuovo file
.Close
End With
Next
2) Se non averte mai utilizzato il vb di Excel, date un'occhiata aquesto articolo Wiki:
3) Il codice può essere lanciato più volte. Se nella cartella di destinazione è presente un file con lo stesso nome, verrà sovrascritto.
4) Se si vogliono eliminare i fogli dal file di origine, sostituire:
sh.Copy
con:
sh.Move
Articoli Wiki simili.
- Excel - Dividere una tabella in più file - VBA
- Excel - Dividere una tabella in più fogli nello stesso file- VBA
- Excel - Creare un unico file storico da tanti file - VBA
Commenti.
Sono graditi i tuoi commenti a questo articolo Wiki e, se lo ritieni interessante, per favore spunta la voce : E' stato utile all'inizio della pagina.
Grazie.
NOTA. Excel non dispone nativamente di procedure assolutamente sicure per impedire la visualizzazione e la modifica del codice vb e/o per la protezione dei fogli. E’ una cosa da tenere sempre presente quando si distribuiscono file con contenuti ritenuti delicati. Ricordate anche che è possibile lanciare il file di Excel senza che vengano eseguite le macro.
Risorse.
Avvio Pulito di Windows (courtesy of Microsoft MVP Franco Leuzzi)
Computer infettato da malware (courtesy of Microsoft MVP Vincenzo Di Russo)