布鲁斯希望标题1的所有段落都落在下一页的1/3中,否则它们将从下一页的顶部开始。他想知道是否有办法做到这一点,也许是用宏。

Word具有内置功能,可以根据段落的特征调整分页。 (标题是段落的一种类型,因此它与其他类型的段落一样容易地应用于标题。)在“段落”对话框的“行和分页符”选项卡上,您可以看到以下三个设置:

分页符之前。*选择此设置后,该段落将始终从下一页的顶部开始。

Widow / Orphan Control。*选择此设置可确保如果一个段落需要多行,则该段落的单行不会在页面的底部或顶部留下。即使大多数标题是单行,这对于标题需要多行的情况也是一个方便的设置。

保留下一个。*选择此设置后,可确保该段落与后面的段落保持一致。这对于标题非常有用,因为它可以确保标题必须至少紧随其后的段落的两行。 (这假定您已将以下段落的格式设置为“寡妇/孤立控件”。)

尽管这些控件很棒,但它们无法满足Bruce的需求,因为如果它们通常出现在页面的底部三分之一,则它们都不会强制进入下一页。这意味着Bruce需要提出一种解决方法来实现他想要的功能。

一种方法是定义两种“标题1”样式。其中一种样式可以被认为是“普通”样式,这意味着它将出现在文档文本的普通流程中。其他样式可以基于常规标题1,但可以启用“分页之前”设置(前面已讨论)。这两种样式将非常易于使用。您需要做的就是确保在整个文档中使用所有常规的标题1样式。然后,在打印之前,您可以手动浏览文档,一次一页,然后将第二个标题1样式应用于那些离页面太远的标题,而不适合您。它们将自动移至下一页的顶部,Word将重新分页文档,您可以继续扫描需要移动的标题。

相反的方法是将手册分页符实际放在标题1的所有段落之前。如果然后选择分页符和“标题1”段落,则可以将其定义为一个构建基块,以后可以将其用于所有标题。 (只需插入构建基块,然后修改实际标题段落中的文本。)在打印之前,手动浏览文档,如果看到标题可以移至上一页,请删除正好在标题段落的前面。 Word将标题移至上一页,重新对文档进行分页,然后您可以继续扫描可移动的标题。

如果页面的下三分之一不超过10行文字,那么您可以对标题使用一种相当新颖的方法:使用首字下沉对其进行格式化。首字下沉最多可容纳10行。您需要做的就是确保“删除”字符非常细。例如,您可以尝试使用大写字母I。将单个字符设置为非常小的磅值并将其颜色设置为白色。然后选择字符并将其设为10行首字下沉。如果整个首字下沉无法放在页面上,Word会强制将其移至下一页。您可能必须使用某些格式设置特性才能准确获得所需的内容,但这是唯一不涉及任何手动处理的潜在解决方法。

如果要使用宏进行格式化,最实用的方法是让宏在文档完成后调整任何标题1段落的位置。这个想法是让宏从文档的开头开始搜索,以查找标题1的任何段落。如果找到一个页面并将其放置在页面高度的66%以上,则将插入分页符以将标题移至下一页。下面的宏执行所有这些任务。

Sub AdjustHeading()

Dim CursorVert As Single     Dim Pgheight As Single     Dim styleName As String

styleName = "Heading 1"

If ActiveDocument.Styles(styleName).ParagraphFormat.PageBreakBefore Then         MsgBox styleName & " has 'Page break before' set. Run aborted"

Exit Sub     End If     Selection.HomeKey unit:=wdStory     With Selection.Find         .ClearFormatting         .Style = ActiveDocument.Styles(styleName)

.Text = ""

.Replacement.Text = ""

.Forward = True         .Wrap = wdFindStop     End With     Do While Selection.Find.Execute         If Asc(Selection.Range.Characters(1)) = 12 Then             Selection.MoveStart unit:=wdCharacter, Count:=1         End If         With ActiveDocument.Sections(Selection.Information(wdActiveEndSectionNumber)).PageSetup             CursorVert = Selection.Information(wdVerticalPositionRelativeToPage) - .TopMargin             Pgheight = .PageHeight - .TopMargin - .BottomMargin         End With         If CursorVert > Selection.Style.ParagraphFormat.SpaceBefore Then             If CursorVert / Pgheight > 0.66 And Len(Selection.Range) > 1 Then                 Selection.End = Selection.Start                 Selection.TypeText Chr(12)

End If         End If         Selection.Start = Selection.End     Loop End Sub

为了使此宏正常运行,应确保您的“标题1”样式未设置“分页符之前”属性。

该宏确定当前节的页面高度,以容纳在每个节之间变化页面高度的文档。

通过从纸张高度中减去上下页边距来计算页面高度。

注意:

如果您想知道如何使用此页面(或_WordTips_网站上的任何其他页面)上描述的宏,我准备了一个包含有用信息的特殊页面。

_WordTips_是您进行经济有效的Microsoft Word培训的来源。

(Microsoft Word是世界上最流行的文字处理软件。)本技巧(12564)适用于Microsoft Word 2007、2010、2013、2016、2019和Office 365中的Word。