Как можно «разбить» файл Excel (.xlsx), содержащий несколько листов, на отдельный лист [n] .xlsx?

102289
jhstuckey

Я думаю, что название говорит все это для этого вопроса, но для уточнения немного дальше:

У меня есть файл .xlsx, который содержит несколько десятков листов. Я хочу вывести все эти листы в виде отдельных файлов .xlsx. Автоматическое присвоение им имен не требуется. Есть ли в Excel функция экспорта листов в отдельный файл?

14

3 ответа на вопрос

16
Peter Albert

It is not a built-in feature.

However, if you run this code, it should do the job.

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 

To run the code, do the following:

  1. Open the VBA editor (Alt+F11)
  2. In the tree in the top left corner, right click on your workbook and insert a new module
  3. Copy the above code into this module
  4. Close the VBA editor
  5. In Excel press Alt+F8 to run macros and select SaveSheets

or see How do I add VBA in MS Office?

Спасибо! А как насчет обратного? - собрать все вместе? Этот файл Excel, по-видимому, содержал «ссылки» (я раньше не использовал эту функцию), и после разделения Excel не может найти ссылки (он ищет первый лист); Есть ли возможность разделить их и обновить ссылки одновременно / или просто обновить ссылки? jhstuckey 11 лет назад 0
вопрос в том, как вы хотите обрабатывать ссылки. Вы можете легко заменить их значениями, вставив `Workbooks (Workbooks.Count) .BreakLinks` после` ws.Copy` ... Peter Albert 11 лет назад 1
После того, как я открыл одну книгу, всплывающее окно в Excel предложило мне исправить ссылки; Я щелкнул через это диалоговое окно, и теперь ссылки работают для всех файлов. Мне интересно, если это было сохранено в файле или локально ... jhstuckey 11 лет назад 0
Когда вы говорите, замените их значениями на Workbooks (Workbooks.Coun) .BreakLinks означает, что ссылки удалены, или ...? Я думаю, что лучший способ справиться с ними - просто покончить с ними (то есть, когда пользователи открывают разделенные теперь файлы Excel, они не видят предупреждение о неработающих ссылках). jhstuckey 11 лет назад 0
извините, попробуйте `Workbooks (Workbooks.Count) .BreakLink` - без` s` в конце Peter Albert 11 лет назад 0
любой способ сделать это в libre (LibreOffice Calc)? Oki Erie Rinaldi 7 лет назад 0
11
Der Hochstapler
  1. When you right-click the tab of an Excel sheet, you can select Move or Copy...

    enter image description here

  2. In the resulting dialog, you can select a target work book. Select (new book).

    enter image description here

  3. Click OK. Your sheet is now inside a new document.

5
hrvoj3e

Я попробовал решение Питера Альберта, и оно не сработало для меня, поэтому я нашел решение в этом посте («Excel - сохранить рабочие листы как отдельные файлы») в « Дневнике компьютерного гика» .

Работает отлично. Вы должны переименовать листы, которые содержат точки, чтобы получить правильно названные файлы с .xlsрасширениями.

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 

Используйте инструкции для создания и запуска этого макроса из публикации Питера Альберта или из Как добавить VBA в MS Office?

Я также попробовал решение Питера Альберта, и произошла ошибка «Ошибка времени выполнения 13»: несоответствие типов. К счастью, решение в этом ответе работает для меня. Bin 8 лет назад 1
как я могу заставить его перезаписать существующие файлы с тем же именем? DAE 6 лет назад 0
Мне это не нужно, потому что каждый дамп уходит в отдельную папку. Может быть, попробуйте [эту тему] (https://stackoverflow.com/a/14634781/2450431) hrvoj3e 6 лет назад 0

Похожие вопросы