Вставьте пробел, если раздел заканчивается на странице ODD Word Macro - PullRequest
0 голосов
/ 18 июня 2019

Чего я должен достичь:

В моем текстовом документе есть два типа данных: «Сводка» и «Роялти», которые могут иметь несколько из этих двух разделов в одном документе.но всегда в той же последовательности "Сводка -> Роялти -> Сводка -> Роялти"

  1. Я должен добавить пустую страницу после каждой страницы Сводка.это всегда будет не более одной страницы.
  2. Для роялти, если раздел роялти начинается с страницы 2 и заканчивается на 4, то это означает, что общее количество страниц равно 3, в этом случае мне нужно добавить пустую страницу послеэтот.

Код, написанный до сих пор, приведен ниже:

Sub Add_Page_After_Summary()
'
' Add_Page_After_Summary Macro

' Add_Page_After_Summary
'
' Sample Code
ActiveDocument.Range.Select
Do

With Selection.Find
        .Text = "S U M M A R Y             "
        .Execute
End With

    If Selection.Find.Found Then

        Selection.GoTo What:=wdGoToBookmark, Name:="\Page"
        Selection.MoveRight Unit:=wdCharacter, Count:=1
        Selection.MoveLeft Unit:=wdCharacter, Count:=1
        Selection.InsertBreak Type:=wdPageBreak

    Else: GoTo nxt

    End If
Loop


nxt:

ActiveDocument.Range.Select

Do

With Selection.Find
        .Text = "R O Y A L T Y             "
        .Execute
End With

    If Selection.Find.Found Then
        Dim startpage As Integer
        Dim endpage As Integer
        startpage = Selection.Information(wdActiveEndPageNumber)
        Selection.GoTo What:=wdGoToBookmark, Name:="\Section"
        endpage = Selection.Information(wdActiveEndPageNumber)

        Dim difference As Integer
        difference = endpage - startpage

        If difference Mod 2 > 0 Then
            Selection.GoTo What:=wdGoToBookmark, Name:="\Section"
            Selection.MoveRight Unit:=wdCharacter, Count:=1
            Selection.MoveLeft Unit:=wdCharacter, Count:=1
            Selection.InsertBreak Type:=wdPageBreak
        End If

    Else: Exit Sub

    End If
Loop

End Sub

Мой текущий код работает так, как показано ниже: он проверяет начало Раздела роялти и извлекает конец раздела роялти, которыйпроисходит в последнем документе, это проблема, я хочу получить текущий раздел роялти.Пожалуйста помоги.

1 Ответ

1 голос
/ 18 июня 2019

Если я вас правильно понял, звучит так, как будто вы хотите, чтобы каждый раздел начинался на нечетной странице.Если это правильно, то добавление Odd Page Break перед каждым заголовком Summary или Royalty должно сделать свое дело.Это заставляет пустую страницу добавляться по мере необходимости, когда документ печатается или сохраняется в формате PDF.

Sub Test()
  InsertSectionBreaks "S U M M A R Y             "
  InsertSectionBreaks "R O Y A L T Y             "
End Sub

Sub InsertSectionBreaks(FindText As String)
  Dim FindRange As Word.Range, SectionRange As Word.Range
  Dim Found As Boolean

  Set FindRange = ActiveDocument.Content

  ' Find next section based on text, insert odd page section break just before
  FindRange.Find.ClearFormatting
  With FindRange.Find
    .Text = FindText
    .Replacement.Text = ""
    .Forward = True
    .Wrap = wdFindStop
    .Format = True
    .MatchCase = False
    .MatchWholeWord = False
    .MatchWildcards = False
    .MatchSoundsLike = False
    .MatchAllWordForms = False
    Found = .Execute
  End With

  Do While Found
    'avoid adding a section break at beginning of document
    If FindRange.Information(wdActiveEndAdjustedPageNumber) > 1 Then
      Set SectionRange = FindRange.Duplicate
      With SectionRange
        .Expand wdParagraph
        .Collapse wdCollapseStart
        .InsertBreak Type:=wdSectionBreakOddPage
      End With
    End If
    FindRange.Collapse wdCollapseEnd
    Found = FindRange.Find.Execute
  Loop
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...