Как можно «разбить» файл Excel (.xlsx), содержащий несколько листов, на отдельный лист [n] .xlsx?
102289
jhstuckey
Я думаю, что название говорит все это для этого вопроса, но для уточнения немного дальше:
У меня есть файл .xlsx, который содержит несколько десятков листов. Я хочу вывести все эти листы в виде отдельных файлов .xlsx. Автоматическое присвоение им имен не требуется. Есть ли в Excel функция экспорта листов в отдельный файл?
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:
Open the VBA editor (Alt+F11)
In the tree in the top left corner, right click on your workbook and insert a new module
Copy the above code into this module
Close the VBA editor
In Excel press Alt+F8 to run macros and select SaveSheets
Спасибо! А как насчет обратного? - собрать все вместе? Этот файл 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
When you right-click the tab of an Excel sheet, you can select Move or Copy...
In the resulting dialog, you can select a target work book. Select (new book).
Click OK. Your sheet is now inside a new document.
Работает отлично. Вы должны переименовать листы, которые содержат точки, чтобы получить правильно названные файлы с .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