Come si può "dividere" un file Excel (.xlsx) che contiene più fogli in fogli separati [n] .xlsx?


17

Penso che il titolo dica tutto per questa domanda, ma per elaborare un po 'di più:

Ho un file .xlsx che contiene alcune dozzine di fogli. Voglio produrre tutti quei fogli come file .xlsx separati. La loro denominazione automatica non è necessaria. Excel ha una funzione per esportare fogli in un file separato?

Risposte:


17

Non è una funzionalità integrata.

Tuttavia, se si esegue questo codice, dovrebbe fare il lavoro.

Sub SaveSheets()
    Dim strPath As String
    Dim ws As Worksheet

    Application.ScreenUpdating = False

    strPath = ActiveWorkbook.Path & "\"
    For Each ws In ThisWorkbook.Sheets
        ws.Copy
        'Use this line if you want to break any links:
        BreakLinks Workbooks(Workbooks.Count)
        Workbooks(Workbooks.Count).Close True, strPath & ws.Name & ".xlsx"
    Next

    Application.ScreenUpdating = True
End Sub

Sub BreakLinks(wb As Workbook)
    Dim lnk As Variant
    For Each lnk In wb.LinkSources(xlExcelLinks)
        wb.BreakLink lnk, xlLinkTypeExcelLinks
    Next
End Sub

A eseguire il codice, attenere alla seguente procedura:

  1. Apri l'editor VBA ( Alt+ F11)
  2. Nell'albero nell'angolo in alto a sinistra, fai clic con il pulsante destro del mouse sulla cartella di lavoro e inserisci un nuovo modulo
  3. Copia il codice sopra in questo modulo
  4. Chiudi l'editor VBA
  5. In Excel premere Alt+ F8per eseguire le macro e selezionareSaveSheets

oppure vedi Come posso aggiungere VBA in MS Office?


Grazie! Che dire del contrario? - per rimetterlo insieme? Questo file Excel apparentemente conteneva "collegamenti" (non ho mai usato questa funzione prima) e dopo la divisione di Excel non riesce a trovare i collegamenti (sta cercando il primo foglio); c'è via per dividerli e aggiornare i collegamenti contemporaneamente / o semplicemente aggiornare i collegamenti?
eichoa3I

1
la domanda è come si desidera gestire i collegamenti. Puoi sostituirli facilmente con valori inserendo Workbooks(Workbooks.Count).BreakLinksdopo ws.Copy...
Peter Albert

Dopo aver aperto una cartella di lavoro, una finestra pop-up in Excel mi ha chiesto di correggere i collegamenti; Ho fatto clic su questa finestra di dialogo e ora i collegamenti funzionano per tutti i file. Mi chiedo però se questo è stato salvato nel file o localmente ...
eichoa3I

Quando dici di sostituirli con valori con Workbooks (Workbooks.Coun) .BreakLinks vuoi dire che i collegamenti vengono eliminati o ...? Penso che il modo migliore per gestirli sia semplicemente eliminarli (cioè, quando gli utenti aprono i file Excel ora separati, non vedono l'avvertimento sui collegamenti non funzionanti).
eichoa3I

scusa, prova Workbooks(Workbooks.Count).BreakLink- senza la sfine
Peter Albert

11
  1. Quando fai clic con il pulsante destro del mouse sulla scheda di un foglio Excel, puoi selezionare Sposta o Copia ...

    inserisci qui la descrizione dell'immagine

  2. Nella finestra di dialogo risultante, è possibile selezionare una cartella di lavoro di destinazione. Seleziona (nuovo libro) .

    inserisci qui la descrizione dell'immagine

  3. Clicca OK . Il tuo foglio è ora all'interno di un nuovo documento.


8

Ho provato la soluzione di Peter Albert e non ha funzionato per me, quindi ho trovato una soluzione in questo post ("Excel - salva fogli di lavoro come file separati") su Diary di un fanatico del computer .

Funziona benissimo. È necessario rinominare i fogli che contengono punti per ottenere file con nome corretto con .xlsestensioni.

Sub CreateNewWBS()
Dim wbThis As Workbook
Dim wbNew As Workbook
Dim ws As Worksheet
Dim strFilename As String

    Set wbThis = ThisWorkbook
    For Each ws In wbThis.Worksheets
        strFilename = wbThis.Path & "/" & ws.Name
        ws.Copy
        Set wbNew = ActiveWorkbook
        wbNew.SaveAs strFilename
        wbNew.Close
    Next ws
End Sub

Utilizzare le istruzioni per creare ed eseguire questa macro dal post di Peter Albert o da Come aggiungere VBA in MS Office?


1
Ho anche provato la soluzione di Peter Albert e si è verificato un errore "Errore di run-time '13': digita mancata corrispondenza. Fortunatamente la soluzione in questa risposta funziona per me.
Bin

come posso ottenerlo per sovrascrivere i file esistenti con lo stesso nome?
DAE,

Non ne avevo bisogno perché ogni dump andava in una cartella separata. Forse prova questo thread
hrvoj3e

La tua soluzione ha funzionato per me :)
Muhammad Waheed,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.