【发布时间】:2020-11-25 08:00:53
【问题描述】:
我很困惑如何正确使用页眉和分页符。我有使用 Excel 中的 VBA 生成的 word 格式的报告。基本结构应该是这样的:
第 1 页
- 标题
- 文字
- 文字
- 分页符
第 2 页
- 文字
- 文字
- 文字
- 文字
我得到的结果是这样的:
第 1 页
- 标题
- 文字
- 文字
第 2 页
- 分页符
- 空白页
- 空白页
- 空白页
第 3 页
- 文字
- 文字
- 文字
- 文字
分页符是使用这部分代码创建的:
'Launches word application
Set Wapp = CreateObject("Word.Application")
With Wapp
With .Selection
'New paragraph & line
.TypeParagraph
.TypeText St1
.TypeText St2
'Collapses selection
.Collapse Direction:=0 'Direction:=wdCollapseEnd
'New page
.InsertBreak Type:=7 'Type:=wdPageBreak
End With
End With
我尝试将 Type 更改为 4 或 2,然后它不会创建额外的页面,但随后标题出现在第二页中,我不希望这样。我也尝试在创建标题时添加这一行,但它似乎不起作用:
With Doc.PageSetup
.DifferentFirstPageHeaderFooter = True
End With
然后我在想也许可以通过检测带有分页符的段落来删除空白页面并编写以下代码:
'Procedure will check if there are blank pages and remove them
Sub DeleteLastPageBreak(Wapp As Object)
Dim i As Long
Dim Doc As Word.Document
Dim P As Paragraph
'Creates reference to Word document
Set Doc = Wapp.ActiveDocument
For Each P In Doc.Content.Paragraphs
If P.Range.Characters.Count = 1 Then
If P.Range.Characters(1) = vbFormFeed Then
MsgBox "paragraph found"
End If
End If
Next
End Sub
它似乎无法检测到分页符。我到底做错了什么以及如何达到我想要的结果?
【问题讨论】:
-
您没有插入分页符。在documentation 中查找分节符类型,您会看到已插入分节符。
-
原始代码使用 wdPageBreak 或 7,是的,我使用了相同的文档,只是提到我也尝试了 2 和 4。
-
在这个阶段不要使用 Createobject,使用对 Word 的引用,以便您可以访问 Word 对象的智能感知。 (Tools.References 向下滚动并确保选中 Microsoft Word Object XX.XX 旁边的复选框。)。您是否混淆了标题和标题?如果你确实想要一个 Header 那么这些是 Section 对象的一个属性。页面在 Word 中并不真正存在,它们是由打印机驱动程序生成的人工制品。使用部分和生活会容易得多。
-
相反,如果您使用段落样式作为标题(如您所愿),并且您希望该标题在新页面上开始,请为该样式提供“分页符之前”属性) .这样你就不需要代码来插入分页符了。
-
插入分页符本身不会导致文档中出现空白页。可以插入某些类型的分节符 wdSectionBreakEvenPage (4) 或 wdSectionBreakOddPage (5)。仅当您进行影响页面布局(包括页眉和页脚)的更改时才添加分节符。
标签: excel vba ms-word page-break