6

У меня есть документ Word с более или менее следующей структурой:

Title
Heading 1
  Heading 2
    Text
  Heading 2
    Text
Heading 1
  Heading 2
    Text
...

Я хотел бы, чтобы разрывы страниц были перед всеми заголовками H2, кроме тех, которые идут непосредственно после заголовков H1, когда я предпочел бы, чтобы два заголовка были на одной странице.

Я знаю, что могу автоматически установить "разрыв страницы до" в стиле для заголовка 2, но есть ли способ установить параметр "кроме непосредственно после заголовка 1", не добавляя все разрывы страниц вручную?

Другими словами, я хотел бы сделать следующие перерывы:

Title
-- Page Break --
Heading 1
  Heading 2
    Text
-- Page Break --
  Heading 2
    Text
-- Page Break --
Heading 1
  Heading 2
    Text
-- Page Break --
  Heading 2
    Text
...

2 ответа2

2

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

  1. Используйте диалоговое окно "Абзацы", чтобы Word вставил разрыв страницы перед всем текстом заголовка 2.
  2. Создайте новый стиль "Заголовок 2 Prime", который точно соответствует заголовку 2, но снимите флажок "Разрыв страницы до". Убедитесь, что вы пишете "Заголовок 2 Prime" именно так, как написано здесь.
  3. Нажмите Alt+F11, чтобы открыть VBA development environment , затем нажмите «Вставить> Модуль», чтобы открыть новое окно для ввода программ.
  4. Вставьте следующие операторы в окно. Эти операторы заменяют все абзацы заголовка 2, которые идут после абзацев заголовка 1, на стиль заголовка 2.

Код для вставки:

'''''''''''''''''''''''''''''''''''''''''''
Sub replace_Heading2_with_Heading2Prime()

Dim i As Integer
Dim s As String
Dim h As String

'''''''''''''''''''''''''''''''''''''
'loop through all pgp and report heading 2

For i = 1 To ActiveDocument.Paragraphs.Count

s = ActiveDocument.Paragraphs(i).Style

If (s = "Heading 2") Then
 h = findPriorHeading(i - 1)
 If (h = "Heading 1") Then
 ActiveDocument.Paragraphs(i).Style = "Heading 2 Prime"
 End If
End If

Next i

Exit Sub

End Sub

Function findPriorHeading(iPgp As Integer) As Variant
Dim i As Integer
Dim blnFoundHeading As Boolean
'walk backwards until any heading is found
 With ActiveDocument
 i = iPgp
 blnFoundHeading = False
 Do Until (i < 1 Or blnFoundHeading)
 s = .Paragraphs(i).Style
 If (InStr(s, "Heading") > 0) Then
 blnFoundHeading = True
 findPriorHeading = s
 Exit Function
 End If
 i = i - 1
 Loop
 End With
 findPriorHeading = ""

End Function
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Нажмите Alt+F11, чтобы вернуться в Word , затем нажмите Alt+F8, чтобы открыть диалоговое окно Macros. Дважды щелкните элемент "replace_Heading2_with_Heading2Prime", чтобы запустить макрос.

Надеюсь, это поможет.

1

Мое решение:

  1. Установите флажок "Разрыв страницы раньше" в свойствах стиля для H2,
  2. Для каждого экземпляра H1 перейдите к связанному с ним «x.1», то есть к первому экземпляру H1, откройте свойства абзаца и вручную снимите флажок "Разрыв страницы до".

Как и у решения Darrin Koltow в этой теме, здесь есть свои плюсы (нет необходимости в отдельном стиле) и минусы (все еще требуется некоторая ручная работа), и это явно вопрос предпочтений.

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .