Как установить стиль для частей документа - PullRequest
1 голос
/ 17 июня 2019

У меня есть функция, которая устанавливает стиль для заголовков в книге.Я пытаюсь применить другой стиль к другим частям документа, но не могу заставить его работать.

Таким образом, есть 3 стиля:

  1. Заголовок главы
  2. Первая строка текста после заголовка главы до следующего разрыва строки (^ p)
  3. Все после первой строки, до следующего разрыва страницы (^ m)

Я уверен, что я объявляю другие массивы с использованием подстановочных знаков - но у меня возникли проблемы с логикой, и я имелпроблемы, когда подстановочные знаки = true.

Если у кого-то также есть какие-либо ресурсы о том, как установить свои собственные стили, объявите их для каждой части (см. Стиль замены в коде для идеи относительно того, что я хочу сделать - «Заголовок 1,Заголовок главы "- могу ли я определить это в макросе?), Я был бы очень признателен!

См. Код ниже для функции главы.

Private Function iiiChapterHeadings()
    Dim Chapters As Variant, Chapter
    Chapters = Array("Chapter One", "Chapter Two", "Chapter Three")

    For Each Chapter In Chapters

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    Selection.Find.Replacement.Style = ActiveDocument.Styles( _
        "Heading 1,Chapter Heading")
    With Selection.Find
        .Text = Chapter
        .Replacement.Text = "^m" & Chapter & "^p^p"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = True
        .MatchCase = False
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With

    Selection.Find.Execute Replace:=wdReplaceAll
    Next

End Function

ПРИМЕР ДОКУМЕНТА !!!!

Chapter One^p
^p
This first line of text will have a style set to it so there's no indentation, the first letter of the sentence is a capital letter and it applies to everything up to the next line break.^p
Everything after the line break above has a different style set to it.^p
All of this will have that style up until the next page break.^p
As will this line.^p
And this etc. ^p
^m

Chapter Two^p
^p

Ответы [ 2 ]

0 голосов
/ 18 июня 2019

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

В вашем вопросе вы ссылаетесь на "перенос строки (^ p)". Будьте осторожны, чтобы не перепутать строки с абзацами, так как они разные. ^ p на самом деле является меткой абзаца и вводится с помощью клавиши Enter. В Word также есть разрывы строк, введенные с помощью Shift+Enter, которые можно найти с помощью ^ l.

Если единственная цель разрыва страницы - убедиться, что заголовок главы находится на новой странице, то в этом нет необходимости. Ваш стиль заголовка главы может быть определен, чтобы иметь неявный разрыв страницы, установив «Разрыв страницы до».

Пустой абзац после заголовка главы также не нужен. Потребность в этом методе пробелов умерла с пишущей машинкой. Вместо этого установите «Интервал после» для стиля заголовка главы, чтобы обеспечить соответствующий объем пространства.

Встроенные стили Word, за исключением Normal, имеют имена, которые описывают их предполагаемое использование. Наиболее подходящий стиль для текста в теле документа - это основной текст.

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

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

Sub FormatDocument()
  With ActiveDocument.Range
    'set base style for document
    .Style = wdStyleBodyText
    RemovePageBreaks
    ModifyHeading1
    ' Find chapter headings and apply Heading 1
    With .Find
      .ClearFormatting
      .Text = "Chapter <*>"
      .Replacement.Text = ""
      .Forward = True
      .Wrap = wdFindStop
      .Format = False
      .MatchCase = True
      .MatchWholeWord = False
      .MatchWildcards = True
      .MatchSoundsLike = False
      .MatchAllWordForms = False
      .Execute
    End With

    Do While .Find.Found
      With .Paragraphs.First
        .Style = wdStyleHeading1
        .Next.Style = wdStyleHeading2
      End With
      .Collapse wdCollapseEnd
      .Find.Execute
    Loop
  End With
End Sub

Private Sub RemovePageBreaks()
  With ActiveDocument.Content.Find
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^m"
    .Replacement.Text = ""
    .Execute Replace:=wdReplaceAll
    'removing the page break leaves an empty para so remove all empty paragraphs
    'this will also remove the unnecessary empty paragraph after the chapter heading
    .ClearFormatting
    .Replacement.ClearFormatting
    .Text = "^p^p"
    .Replacement.Text = "^p"
    .Execute Replace:=wdReplaceAll
  End With
End Sub

Private Sub ModifyHeading1()
  With ActiveDocument.Styles(wdStyleHeading1).ParagraphFormat
    'add implicit page break
    .PageBreakBefore = True
    'add space after in points
    .SpaceAfter = 12
  End With
End Sub

Если вы хотите узнать больше о стилях в Word, посетите веб-сайт Шона Келли

Хотя многие содержащиеся в нем статьи довольно стары, вам также может пригодиться сайт Word MVP . Он также содержит ссылки на сайты отдельных MVP.

0 голосов
/ 18 июня 2019

Вам не нужны подстановочные знаки для этого.Подойдет обычная Find с циклом.Например:

Sub Demo()
Application.ScreenUpdating = False
Dim i As Long
With ActiveDocument
  With .Range
    .Style = wdStyleNormal
    .InsertBefore vbCr
    With .Find
      .ClearFormatting
      .Replacement.ClearFormatting
      .Text = "^pChapter"
      .Replacement.Text = ""
      .Forward = True
      .Format = False
      .Wrap = wdFindStop
      .Execute
    End With
    Do While .Find.Found
      .Start = .Start + 1
      .Paragraphs.First.Style = wdStyleHeading1
      .Collapse wdCollapseEnd
      .Find.Execute
    Loop
  End With
  With .Range
    With .Find
      .Text = ""
      .Style = wdStyleHeading1
      .Execute
    End With
    Do While .Find.Found
      .Paragraphs.First.Next.Style = wdStyleHeading2
      .Collapse wdCollapseEnd
      .Find.Execute
    Loop
  End With
  .Range.Characters.First.Text = vbNullString
End With
Application.ScreenUpdating = True
End Sub

В приведенном выше коде предполагается, что основная часть текста будет выполнена в стиле «Нормальный», в то время как в заголовках ваших глав будет использоваться стиль «Заголовок 1», а в последующих пунктах будет использоватьсяСтиль «Заголовок 2».Поскольку вы не говорите, какие стили вы используете, кроме «Заголовок 1», я просто выбрал два встроенных стиля.

...