Articolo wiki
  • Questo articolo wiki è bloccato
Applicabile a 531 visualizzazioni

Excel - Dividere i fogli di un file in tanti nuovi file, uno per foglio - VBA

Livello tecnico : Base

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.

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)

Commenti (1)

avanzamento