Как разделить файл Word на отдельные файлы

Привет, уважаемые читатели. Если у вас есть большой документ, который вам нужно разделить, то давайте узнаем, есть ли какой-нибудь способ его поделить на отдельные файлы. Для этого мы воспользуемся возможностями Visual Basic Application для Ворда. Эта программа использует специальные код, которые диктуют Ворду, что нужно сделать. Итак, приступим.

 

Скрипт, который разделит файл в местах-маркерах

Прежде, чем запускать этот код, нужно подготовить документ к разделению на отдельные файлы.

В тех местах, где файл Word будет разделен на несколько отдельных файлов, мы расставим маркеры в виде «///». Это скажет VBA, что в тех местах, где он встретит /// он поймет, что ему нужно будет дальнейшую часть сохранить в новый файл Word. Смотрите на скриншот, где я отметил маркером то место, где я хочу, чтобы был разделен документ.ворд на отдельные файлы

Этот знак ставится в английской раскладке!

документ Word делим на несколько частей

Новые файлы будут сохранены в папку с оригинальным документом, поэтому, советую тот документ, который вы будете разделять, сохраните в отдельную папку, как на скриншоте.ворд в отдельные документы

В конце документа разделяющий маркер ставить нет смысла, иначе VBA создаст просто пустой файл Word.

Шаг 1. 

В окне Ворда нажмите на сочетание клавиш ALT + F11 для запуска Visual Basic Application.как разделить файл word на отдельные файлы

 

Шаг 2.

В меню «Insert» — «Module». Теперь скопируйте код скрипта (его вы встретите ниже) и вставьте его в окне VBA.как разделить текст в ворде

Шаг 3.

Запустите выполнение кода, нажав F5 на клавиатуре, либо на панели на зеленый треугольник.как в ворде сделать несколько страниц

Этот VBA код разделит документ на отдельные файлы в тех местах, где были установлены маркеры. Выделите его левой кнопкой мыши и скопируйте (правой кнопкой мыши — Копировать).

Sub SplitNotes(delim As String, strFilename As String)
Dim doc As Document
Dim arrNotes
Dim I As Long
Dim X As Long
Dim Response As Integer
arrNotes = Split(ActiveDocument.Range, delim)
Response = MsgBox("This will split the document into " & UBound(arrNotes) + 1 & " sections.Do you wish to proceed?", 4)
If Response = 7 Then Exit Sub
For I = LBound(arrNotes) To UBound(arrNotes)
If Trim(arrNotes(I)) <> «» Then
X = X + 1
Set doc = Documents.Add
doc.Range = arrNotes(I)
doc.SaveAs ThisDocument.Path & "\" & strFilename & Format(X, "000")
doc.Close True
End If
Next I
End Sub
Sub test()
'delimiter & filename
SplitNotes "///", "Notes"
End Sub

А вот результат разделения документа Ворд на отдельные файлы:документ word в отдельные файлы

Скрипт, который разделит документ постранично

Порядок шагов, для запуска скрипта в Word тот же, что и в предыдущем способе. Скопируйте следующий ниже код и запустите его выполнение.

Этот код VBA разделит файл Word постранично, и каждую страницу сохранит в отдельные файлы. Выделите его левой кнопкой мыши и скопируйте (правой кнопкой мыши — Копировать).

Sub SplitIntoPages() 
Dim docMultiple As Document 
Dim docSingle As Document 
Dim rngPage As Range 
Dim iCurrentPage As Integer 
Dim iPageCount As Integer 
Dim strNewFileName As String 
Application.ScreenUpdating = False 'Makes the code run faster and reduces screen _
flicker a bit. 
Set docMultiple = ActiveDocument 'Work on the active document _
(the one currently containing the Selection) 
Set rngPage = docMultiple.Range 'instantiate the range object
iCurrentPage = 1 
'get the document's page count
iPageCount = docMultiple.Content.ComputeStatistics(wdStatisticPages) 
Do Until iCurrentPage > iPageCount 
If iCurrentPage = iPageCount Then 
rngPage.End = ActiveDocument.Range.End 'last page (there won't be a next page) 
Else
'Find the beginning of the next page
'Must use the Selection object. The Range.Goto method will not work on a page
Selection.GoTo wdGoToPage, wdGoToAbsolute, iCurrentPage + 1 
'Set the end of the range to the point between the pages
rngPage.End = Selection.Start 
End If 
rngPage.Copy 'copy the page into the Windows clipboard
Set docSingle = Documents.Add 'create a new document
docSingle.Range.Paste 'paste the clipboard contents to the new document
'remove any manual page break to prevent a second blank
docSingle.Range.Find.Execute Findtext:="^m", ReplaceWith:="" 
'build a new sequentially-numbered file name based on the original multi-paged file name and path
strNewFileName = Replace(docMultiple.FullName, ".doc", "_" & Right$("000" & iCurrentPage, 4) & ".doc") 
docSingle.SaveAs strNewFileName 'save the new single-paged document
iCurrentPage = iCurrentPage + 1 'move to the next page
docSingle.Close 'close the new document
rngPage.Collapse wdCollapseEnd 'go to the next page
Loop 'go to the top of the do loop
Application.ScreenUpdating = True 'restore the screen updating 
'Destroy the objects.
Set docMultiple = Nothing 
Set docSingle = Nothing 
Set rngPage = Nothing 
End Sub

Когда скрипт разделит документ на отдельные файлы, то все они будут сохранены в ту же папку, где находится оригинальный документ.

Как разделить файл Word на отдельные файлы: 30 комментариев

  • 07/02/2016 в 05:11
    Permalink

    Спасибо. Очень пригодится. Только вот как расставлять маркеры — вообще не написано./// — это я набрала с клавиатуры. А в WORD как?Остальное вроде бы понятно, непонятен только список документов, или файлов, курсивом и бледный такой, это зачем? И еще — непонятно, зачем столько много документов хранить в одной папке, чтобы их разделять? А нельзя в разных папках? Или это на всякий случай? Еще не написано, какого года эта версия WORD.Спасибо.

    Ответ
    • 07/02/2016 в 22:37
      Permalink

      Спасибо, Виктория, за ваши замечания. Если остались вопросы, то я дополню статью, сделаю более подробную инструкцию. Подписывайтесь, чтобы быть в курсе

      Ответ
  • 12/04/2016 в 19:02
    Permalink

    Добрый день!

    При запуске макроса выходит ошибка. Можете подсказать в чем причина? Куда можно отправить скрин ошибки?

    Ответ
    • 12/04/2016 в 22:41
      Permalink

      Добрый. Скрин можно выложить вот сюда fastpic.ru. Сообщение отправляйте через форму контактов http://v-ofice.ru/contacts/ и попробую вам помочь

      Ответ
  • 14/05/2016 в 14:41
    Permalink

    Спасибо всем, кто сообщил, что в скрипт не работает. Закралась некоторая ошибка, скрипты обновил, должный работать.

    Ответ
  • 14/05/2016 в 16:50
    Permalink

    Поправил скрипт немного, вышло так:

    Sub SplitNotes(delim As String, strFilename As String)
    Dim doc As Document
    Dim arrNotes
    Dim I As Long
    Dim X As Long
    Dim Response As Integer
    arrNotes = Split(ActiveDocument.Range, delim)
    If Response = 7 Then Exit Sub
    For I = LBound(arrNotes) To UBound(arrNotes)
    If Trim(arrNotes(I)) «» Then
    X = X + 1
    Set doc = Documents.Add
    doc.Range = arrNotes(I)
    doc.SaveAs ThisDocument.Path & «/» & strFilename & Format(X, «000»)
    doc.Close True
    End If
    Next I
    End Sub
    Sub test()
    ‘delimiter & filename
    SplitNotes «11223344», «Notes»
    End Sub

    Ответ
  • 23/08/2016 в 14:38
    Permalink

    Очень нужная и полезная функция но к сожалению у меня код не выполняется (постраничное разбиение)
    MS Word 2013
    Сначала придрался ко всем комментариям после ‘ — удалила
    Дальше выдает ошибку «424» — нет объекта.
    Подскажите пожалуйста как исправить, спасибо.

    Ответ
    • 24/08/2016 в 01:11
      Permalink

      Разобрался в чем проблема — при выводе кода на сайт он немного изменялся, а потому и не работал. Сейчас работает.

      Ответ
  • 24/08/2016 в 00:07
    Permalink

    Выдает синтаксическую ошибку в строке
    Sub test()
    delimiter & filename

    Ответ
    • 24/08/2016 в 01:10
      Permalink

      Разобрался в чем проблема — при выводе кода на сайт он немного изменялся, а потому и не работал. Сейчас работает.

      Ответ
  • 06/09/2016 в 01:44
    Permalink

    При попытке разделить документ на два файла система оповещает о такой вот ошибке:
    doc.SaveAs ThisDocument.Path & « \ » & strFilename & Format(X, «000»)
    В конце не должно быть нулей…
    Как быть?

    Ответ
    • 16/09/2016 в 12:21
      Permalink

      А каким способом пользовались? Судя по ошибке Ворд ругается на неправильно указанный путь.

      Ответ
  • 16/09/2016 в 16:40
    Permalink

    пользовался способом, указанным автором выше (разделение файла на несколько частей). Вот эта строчка создает проблемы: doc.SaveAs ThisDocument.Path & « \ » & strFilename & Format(X, «000»)

    Ответ
  • 28/09/2016 в 03:21
    Permalink

    Замечательно. Огромное спасибо, спасли полчаса моей жизни сейчас и долгие часы в будущем!

    Ответ
  • 01/12/2016 в 19:34
    Permalink

    Благодарю! Выручили! Сэкономил вагон времени

    Ответ
  • 20/12/2016 в 08:12
    Permalink

    Каждый раз выскакивает окно сохранить как, а потом ошибка.. Приходится нажимать End и запускать заново, теряется всякий смысл.
    Можно ли сделать так, что сохранение шло полностью и без запросов

    Ответ
    • 21/12/2016 в 03:34
      Permalink

      Отправляйте хотя бы скриншот или порядок ваших действий

      Ответ
      • 04/01/2017 в 22:12
        Permalink

        Повторил тоже самое на работе — все сработало… а дома никак. Windows 8.1 Office 2003.
        Проблема в том, что создание файлов происходит не в фоновом режиме, а каждый раз возникает окно «сохранить как» и ждет моих действий.. возможно это какая-то настройка безопасности.. не подскажете как убрать это?

        Ответ
        • 05/01/2017 в 00:26
          Permalink

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

          Ответ
  • 21/12/2016 в 21:05
    Permalink

    Возможно ли сохранить форматирование текста (колонтитули, обекты, ссылки и т.д.) при раделении с помощью маркеров? Данные действия теряют смисл поскольку время потраченое на форматирование больше чем простое пересохранение и вибрасивание лишнего текста. Спасибо!

    Ответ
    • 23/12/2016 в 00:28
      Permalink

      Те способы, что описаны выше — это все, что могу предложить вам. Как еще разделить документ на части я не знаю

      Ответ
  • 07/01/2017 в 07:09
    Permalink

    Происходит потеря форматирования изначального документа..
    Файлы на выходе получаются без всякого форматирования.
    Не знаете как с этим бороться?

    Ответ
  • 14/01/2017 в 08:38
    Permalink

    Здравствуйте, а подскажите где в скрипте поменять, что бы он по две странице копировал в новый файл?

    Ответ
    • 15/01/2017 в 17:55
      Permalink

      Добрый день. Я не специалист скриптов, но попробуйте поменять вот эти значения
      iCurrentPage = 2
      Selection.GoTo wdGoToPage, wdGoToAbsolute, iCurrentPage + 2

      Ответ
  • 31/03/2017 в 11:54
    Permalink

    Добрый день) подскажите пожалуста, а как можно сделать так что бы при сохранении ворд брал для имени первую строчку полученного файла? понимаю что коряво написал но только-только узнал какая это мощная штука — макросы)

    Ответ
    • 03/04/2017 в 16:06
      Permalink

      Добрый день, Дмитрий. Я не являюсь гуру макросов. Я умею находить решения и рассказать о них людям.

      Ответ

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

одиннадцать − 3 =