разбиение текстового документа на разделы: как контролировать обновление нумерации страниц - PullRequest
1 голос
/ 05 марта 2019

У меня есть макрос, который разрезает документ на секции по одной странице каждый:

Selection.HomeKey Unit:=wdStory 
While Selection.Information(wdActiveEndPageNumber) < Selection.Information(wdNumberOfPagesInDocument)

    ActiveDocument.Bookmarks("\page").Range.Select
    With Selection.Find
      .Text = "^b"
      .Forward = True ' or False
      .Wrap = wdFindStop
      .Format = False
      If .Execute Then
        ' found section break: go to next page
        Selection.GoToNext wdGoToPage
      Else
        ' found no section break: append one
        Selection.Collapse Direction:=wdCollapseEnd
        Selection.InsertBreak Type:=wdSectionBreakNextPage
      End If
    End With

Wend

Я могу перезапустить макрос после редактирования документа, и только расширенная страница будет снова разделена.

Следуя приведенному выше коду, я зацикливаюсь на всех разделах и отключаю свойство «ссылка на предыдущий» в верхних и нижних колонтитулах.Затем я снова зацикливаю разделы, чтобы «отсоединить» поля PAGE и NUMPAGE, то есть заменить поля их действительными значениями.

Это работает для некоторых документов и не для других.В проблемном документе при вводе разрыва раздела (вручную или через VBA) номер страницы в следующем разделе переходит на 1, а в документе без проблем - нет.

Как управлятьавтоматическое обновление номера страницы при добавлении разрыва раздела?

1 Ответ

1 голос
/ 05 марта 2019

Зависит ли перезапуск нумерации страниц с помощью верхнего и нижнего колонтитула \ номера страницы \ форматирования номеров страниц, настройки «Начать с» (вместо «Продолжить из предыдущего раздела»).Если задано число, нумерация страниц будет возобновлена ​​после вставки разрывов разделов.По умолчанию это значение «off», но оно может быть включено, например, в шаблоне.

В объектной модели эквивалентным объектом является Document.Section.HeaderFooter.PageNumbers, свойство RestartNumberingAtSection.Установите значение False, чтобы нумерация продолжалась от одного раздела к другому.Если в документе есть только один раздел, это можно сделать для этого раздела, и любые новые разделы будут «наследовать» параметр.В противном случае, проверьте это в цикле, в то же время SameAsPrevious установлено на False.

Sub TestBreakUpPages()
    Dim Doc As Word.Document
    Dim Sec As Word.Section
    Dim hdr As Word.HeaderFooter
    Dim pageNum As PageNumbers

    Set Doc = ActiveDocument
    Selection.HomeKey Unit:=wdStory
    While Selection.Information(wdActiveEndPageNumber) < Selection.Information(wdNumberOfPagesInDocument)

        Doc.Bookmarks("\page").Range.Select
        With Selection.Find
          .Text = "^b"
          .Forward = True ' or False
          .wrap = wdFindStop
          .Format = False
          If .Execute Then
            ' found section break: go to next page
            Selection.GoToNext wdGoToPage
          Else
            ' found no section break: append one
            Selection.Collapse Direction:=wdCollapseEnd
            Selection.InsertBreak Type:=wdSectionBreakNextPage
          End If
        End With

    Wend

    For Each Sec In Doc.Sections
        Set hdr = Sec.Headers(wdHeaderFooterPrimary)
        Set pageNum = hdr.PageNumbers
        If pageNum.RestartNumberingAtSection Then
           pageNum.RestartNumberingAtSection = False
        End If
        hdr.LinkToPrevious = False
    Next

    For Each Sec In Doc.Sections
       Set hdr = Sec.Headers(wdHeaderFooterPrimary)
        hdr.Range.Fields.Unlink
    Next
End Sub
...