Word 2010 - разрыв страницы до H2, кроме как после H1


7

У меня есть документ 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

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

  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чтобы открыть диалоговое окно Макросы. Дважды щелкните элемент «replace_Heading2_with_Heading2Prime», чтобы запустить макрос.

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


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

Извините за уродливый код. Я убрал форматирование. Весь контент с серым фоном, который является жирным шрифтом, является кодом. Выберите все это и только это, и вставьте его в редактор VBA, как указано в инструкциях.
Даррин Колтов

Хотя это не совсем то, на что я надеялся, это работает (и предполагает, что для этого не существует простого решения для флажков), так что +1.
Бристоль

1

Мое решение:

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

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

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

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.