Wie kann man eine Excel-Datei (.xlsx), die mehrere Arbeitsblätter enthält, in separate Arbeitsblätter [n] .xlsx aufteilen?

17

Ich denke, der Titel sagt schon alles für diese Frage aus, aber um es ein bisschen weiter auszuführen:

Ich habe eine XLSX-Datei, die ein paar Dutzend Blätter enthält. Ich möchte alle diese Blätter als separate XLSX-Dateien ausgeben. Eine automatische Benennung ist nicht erforderlich. Hat Excel eine Funktion, um Blätter in eine separate Datei zu exportieren?

eichoa3I
quelle

Antworten:

17

Es ist keine eingebaute Funktion.

Wenn Sie diesen Code jedoch ausführen, sollte er den Job erledigen.

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

Führen Sie die folgenden Schritte aus, um den Code auszuführen:

  1. Öffnen Sie den VBA-Editor ( Alt+ F11)
  2. Klicken Sie in der Baumstruktur oben links mit der rechten Maustaste auf Ihre Arbeitsmappe und fügen Sie ein neues Modul ein
  3. Kopieren Sie den obigen Code in dieses Modul
  4. Schließen Sie den VBA-Editor
  5. Drücken Sie in Excel Alt+ F8, um Makros auszuführen, und wählen Sie ausSaveSheets

oder siehe Wie füge ich VBA in MS Office hinzu?

Peter Albert
quelle
Vielen Dank! Was ist mit der Umkehrung? - um es wieder zusammenzusetzen? Diese Excel-Datei enthielt anscheinend "Links" (ich habe diese Funktion zuvor noch nicht verwendet), und nach dem Aufteilen von Excel können die Links nicht gefunden werden (es wird nach dem ersten Blatt gesucht). Gibt es eine Möglichkeit, sie zu teilen und die Links gleichzeitig zu aktualisieren oder nur die Links zu aktualisieren?
eichoa3I
1
Die Frage ist, wie Sie mit den Links umgehen wollen. Sie können sie einfach durch Werte ersetzen, indem Sie Workbooks(Workbooks.Count).BreakLinksnach ws.Copy... einfügen
Peter Albert
Nachdem ich eine Arbeitsmappe geöffnet hatte, forderte mich ein Popup-Fenster in Excel auf, die Links zu reparieren. Ich habe durch dieses Dialogfeld geklickt und jetzt funktionieren die Links für alle Dateien. Ich frage mich allerdings, ob dies in der Datei oder lokal gespeichert wurde ...
eichoa3I
Wenn Sie sagen, ersetzen Sie sie durch Werte durch Arbeitsmappen (Workbooks.Coun). BreakLinks bedeuten Sie, dass die Verknüpfungen gelöscht werden, oder ...? Ich denke, die beste Möglichkeit, mit ihnen umzugehen, besteht darin, sie einfach zu beseitigen (dh wenn Benutzer die jetzt getrennten Excel-Dateien öffnen, sehen sie keine Warnung vor defekten Links).
eichoa3I
Entschuldigung, versuchen Sie es Workbooks(Workbooks.Count).BreakLink- ohne die sam Ende
Peter Albert
11
  1. Wenn Sie mit der rechten Maustaste auf die Registerkarte einer Excel-Tabelle klicken, können Sie Verschieben oder Kopieren auswählen.

    Bildbeschreibung hier eingeben

  2. Im daraufhin angezeigten Dialogfeld können Sie eine Zielarbeitsmappe auswählen. Wählen Sie (neues Buch) .

    Bildbeschreibung hier eingeben

  3. Klicken Sie auf OK . Ihr Blatt befindet sich jetzt in einem neuen Dokument.

Der Hochstapler
quelle
8

Ich habe Peter Alberts Lösung ausprobiert und es hat bei mir nicht funktioniert. Deshalb habe ich in diesem Beitrag („Excel - Arbeitsblätter als separate Dateien speichern“) bei Diary eines Computerfreaks eine Lösung gefunden .

Es funktioniert super Sie sollten Blätter, die Punkte enthalten, umbenennen, um korrekt benannte Dateien mit .xlsErweiterungen zu erhalten.

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

Verwenden Sie die Anweisungen zum Erstellen und Ausführen dieses Makros aus dem Post von Peter Albert oder aus Wie füge ich VBA in MS Office hinzu?

hrvoj3e
quelle
1
Ich habe auch Peter Alberts Lösung ausprobiert und es gab einen Fehler "Laufzeitfehler '13': Typenkonflikt. Zum Glück funktioniert die Lösung in dieser Antwort für mich.
Bin
Wie kann ich die vorhandenen Dateien mit dem gleichen Namen überschreiben?
DAE
Ich brauchte das nicht, weil jeder Speicherauszug in einem separaten Ordner abgelegt wird. Vielleicht versuchen Sie diesen Thread
hrvoj3e
Ihre Lösung hat für mich funktioniert :)
Muhammad Waheed