Jak można „podzielić” plik Excel (.xlsx), który zawiera wiele arkuszy na osobny arkusz [n] .xlsx?

17

Myślę, że tytuł mówi wszystko o tym pytaniu, ale aby rozwinąć nieco dalej:

Mam plik .xlsx, który zawiera kilkadziesiąt arkuszy. Chcę wyprowadzić wszystkie te arkusze jako osobne pliki .xlsx. Zautomatyzowane nazewnictwo ich nie jest konieczne. Czy program Excel ma funkcję eksportowania arkuszy do osobnego pliku?

eichoa3I
źródło

Odpowiedzi:

17

To nie jest wbudowana funkcja.

Jeśli jednak uruchomisz ten kod, powinien on wykonać zadanie.

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

Aby uruchomić kod, wykonaj następujące czynności:

  1. Otwórz edytor VBA ( Alt+ F11)
  2. W drzewie w lewym górnym rogu kliknij prawym przyciskiem myszy skoroszyt i wstaw nowy moduł
  3. Skopiuj powyższy kod do tego modułu
  4. Zamknij edytor VBA
  5. W programie Excel naciśnij Alt+, F8aby uruchomić makra i wybierzSaveSheets

lub zobacz Jak dodać VBA w MS Office?

Peter Albert
źródło
Dzięki! Co na odwrót? - złożyć to z powrotem? Ten plik programu Excel najwyraźniej zawierał „linki” (wcześniej nie korzystałem z tej funkcji), a po podzieleniu Excel nie może znaleźć linków (szuka pierwszego arkusza); czy istnieje możliwość ich podzielenia i aktualizacji łączy w tym samym czasie / czy po prostu zaktualizuj linki?
eichoa3I
1
pytanie brzmi, jak chcesz obsługiwać linki. Możesz łatwo zastąpić je wartościami, wstawiając Workbooks(Workbooks.Count).BreakLinkspo ws.Copy...
Peter Albert
Po otwarciu jednego skoroszytu wyskakujące okno w programie Excel poprosiło mnie o naprawienie łączy; Kliknąłem to okno dialogowe i teraz łącza działają dla wszystkich plików. Zastanawiam się jednak, czy zostało to zapisane w pliku, czy lokalnie ...
eichoa3I
Kiedy mówisz, zastąp je wartościami ze skoroszytów (Workbooks.Coun) .BreakLinks masz na myśli, że linki zostały usunięte lub ...? Myślę, że najlepszym sposobem na ich obsługę jest po prostu ich usunięcie (tzn. Kiedy użytkownicy otwierają teraz oddzielone pliki Excela, nie widzą ostrzeżenia o uszkodzonych linkach).
eichoa3I
przepraszam, spróbuj Workbooks(Workbooks.Count).BreakLink- bez skońca
Peter Albert
11
  1. Po kliknięciu karty arkusza Excela prawym przyciskiem myszy możesz wybrać Przenieś lub Kopiuj ...

    wprowadź opis zdjęcia tutaj

  2. W wyświetlonym oknie dialogowym możesz wybrać docelowy skoroszyt. Wybierz (nowa książka) .

    wprowadź opis zdjęcia tutaj

  3. Kliknij OK . Twój arkusz jest teraz w nowym dokumencie.

Der Hochstapler
źródło
8

Wypróbowałem rozwiązanie Petera Alberta i nie działało ono dla mnie, więc znalazłem rozwiązanie w tym poście („Excel - zapisuj arkusze jako osobne pliki”) w Dzienniku maniaka komputerowego .

Działa świetnie. Powinieneś zmienić nazwę arkuszy zawierających kropki, aby uzyskać poprawnie nazwane pliki z .xlsrozszerzeniami.

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

Skorzystaj z instrukcji, aby utworzyć i uruchomić to makro z posta Petera Alberta lub z Jak dodać VBA w MS Office?

hrvoj3e
źródło
1
Próbowałem także rozwiązania Petera Alberta i wystąpił błąd „Błąd czasu wykonania 13”: niezgodność typów. Na szczęście rozwiązanie w tej odpowiedzi działa dla mnie.
Bin
jak mogę go zastąpić istniejące pliki o tej samej nazwie?
DAE,
Nie potrzebowałem tego, ponieważ każdy zrzut przechodzi do osobnego folderu. Może spróbuj tego wątku
hrvoj3e
Twoje rozwiązanie zadziałało dla mnie :)
Muhammad Waheed,