文档页眉、页脚、页码及窗口操作技巧
立即解锁
发布时间: 2025-08-21 01:32:34 阅读量: 4 订阅数: 13 


精通VBA:Office 2016自动化编程指南
### 文档页眉、页脚、页码及窗口操作技巧
#### 1. 页眉和页脚操作
在处理文档时,页眉和页脚的设置是常见需求。以下是一些关于页眉和页脚的操作方法:
- **检查并创建偶数页页眉**:可以通过检查`HeaderFooter`对象的`Exists`属性来判断偶数页页眉是否存在。若不存在,则创建一个包含节号和文档全名的通用页眉,并使用名为“Footer”的样式进行格式化。示例代码如下:
```vba
Dim cSection As Section
With ActiveDocument
For Each cSection In .Sections
cHeader = cSection.Headers(wdHeaderFooterEvenPages)
If Not cSection.Headers(wdHeaderFooterEvenPages).Exists Then
cSection.PageSetup.OddAndEvenPagesHeaderFooter = True
cSection.Headers(wdHeaderFooterEvenPages).Range.Text _
= "Section " & cSection.Index & " of " & .FullName
cSection.Headers(wdHeaderFooterEvenPages).Range. _
Style = "Even Footer"
End If
Next cSection
End With
```
- **断开与上一节页眉或页脚的链接**:默认情况下,Word会将除第一节外的每一节的页眉和页脚链接到上一节的页眉和页脚。若要断开链接,可将`LinkToPrevious`属性设置为`False`;若要创建链接,则设置为`True`。例如,断开活动文档第三节的主页脚与第二节相应页脚的链接:
```vba
ActiveDocument.Sections(3).Footers _
(wdHeaderFooterPrimary).LinkToPrevious = False
```
- **创建不同的首页页眉**:要在某一节的首页创建不同的页眉,可将该节`PageSetup`对象的`DifferentFirstPageHeaderFooter`属性设置为`True`。以下代码检查活动文档第十节是否包含首页页眉,若不存在则创建:
```vba
With ActiveDocument.Sections(10)
If .Headers(wdHeaderFooterFirstPage).Exists = False Then _
.PageSetup.DifferentFirstPageHeaderFooter = True
End With
```
- **创建不同的奇偶页页眉**:若要为文档的奇偶页(除首页外)使用不同的页眉,需创建偶数页页眉。在创建偶数页页眉之前,主页眉默认同时显示在奇偶页上;创建偶数页页眉后,主页眉将变为奇数页页眉。通过设置`PageSetup`对象的`OddAndEvenPagesHeaderFooter`属性为`True`来实现,示例如下:
```vba
ActiveDocument.Sections(1).PageSetup.OddAndEvenPagesHeaderFooter = True
```
- **使用嵌套循环修改页眉和页脚**:若编写格式化文档的程序,可能需要检查或更改文档中的所有页眉和页脚。最简便的方法是使用两个`For Each…Next`循环,外层循环遍历`Sections`集合中的每个`Section`对象,内层循环遍历该节内`HeaderFooters`集合中的每个`HeaderFooter`对象。
#### 2. 页码操作
文档的页眉或页脚通常包含页码,页码可以是简单的数字格式(如1、2、3等),也可以是更复杂的表示章节和页号的格式。VBA通过`PageNumbers`集合来实现页码,可通过文档相应节内适当`HeaderFooter`对象的`PageNumbers`属性返回该集合。
- **添加页码**:要为文档的一个或多个节添加页码,可使用`PageNumbers`集合的`Add`方法。其语法如下:
```vba
expression.Add PageNumberAligment, FirstPage
```
其中,`expression`是返回`PageNumbers`集合的必需表达式,通常直接使用`PageNumbers`集合;`PageNumberAlignment`是可选的`Variant`参数,指定添加页码的对齐方式;`FirstPage`是可选的`Variant`参数,可设置为`False`以抑制首页的页码显示。`PageNumberAlignment`的常量和值如下表所示:
| 常量 | 值 | 对齐结果 |
| --- | --- | --- |
| wdAlignPageNumberLeft | 0 | 左对齐 |
| wdAlignPageNumberCenter | 1 | 居中对齐 |
| wdAlignPageNumberRight | 2 | 右对齐(默认) |
| wdAlignPageNumberInside | 3 | 内侧边距(左页右侧,右页左侧) |
| wdAlignPageNumberOutside | 4 | 外侧边距(左页左侧,右页右侧) |
以下子过程使用两个`For Each…Next`循环为文档各节的所有页眉添加页码:
```vba
Sub AddPageNumbersToAllHeadersAndSections()
Dim cHeader As HeaderFooter, cSection As Section
With Documents("Headers and Footers.docm")
For Each cSection In .Sections
For Each cHeader In cSection.Headers
cSection.Headers(wdHeaderFooterPrimary).PageNumbers.Add _
PageNumberAlignment:=wdAlignPageNumberRight, FirstPage:=True
Next cHeader
Next cSection
End With
End Sub
```
- **移除页码**:要从页面中移除页码,可指定`PageNumber`对象并使用`Delete`方法。以下子过程移除活动文档当前节的每个`PageNumber`对象:
```vba
Sub RemovePageNumbersFromCurrentSection()
Dim ThisHeader As HeaderFooter
Dim ThisPageNumber As PageNumber
With Selection.Sections(1)
For Each ThisHeader In .Headers
For Each ThisPageNumber In ThisHeader.PageNumbers
ThisPageNumber.Delete
Next ThisPageNumber
Next ThisHeader
End With
End Sub
```
- **检查是否存在页码**:要确定文档某一节是否存在页码,可检查该节`PageNumbers`集合的`Count`属性。例如,若当前节的偶数页页眉没有页码,则添加居中对齐的页码:
```vba
If Selection.Sections(1).Headers(wdHeaderFooterEvenPages) _
.PageNumbers.Count = 0 Then Selection.Sections(1) _
.Headers(wdHeaderFooterEvenPages).PageNumbers.Add _
PageNumberAlignment:=wdAlignPageNumberCenter
```
- **更改页码编号**:要更改某一节的页码编号,可使用`StartingNumber`属性,并根据需要使用`RestartNumberingAtSection`、`IncludeChapterNumber`和`ChapterPageSeparator`属性。例如,若活动文档第四节的主页眉当前未分配起始页码,则将其页码编号设置为从55开始:
```vba
With ActiveDocument.Sections(4).Headers(wdHeaderFooterPrimary)
If .PageNumbers.StartingNumber = 0 Then
.PageNumbers.RestartNumberingAtSection = True
.PageNumbers.StartingNumber = 55
End If
End With
```
若要在页码中添加章节编号,可在文档中使用标题编号,将`IncludeChapterNumber`属性设置为`True`,并指定分隔符(如`wdSeparatorEnDash`表示短横线):
```vba
With ActiveDocument.Sections(4).Headers(wdHeaderFooterPrimary) _
.PageNumbers
.IncludeChapterNumber = True
.ChapterPageSeparator = wdSeparatorEnDash
End With
```
- **抑制首页页码显示**:要抑制某一节首页的页码显示,可将该节适当`HeaderFooter`对象的`ShowFirstPageNumber`属性设置为`False`:
```vba
ActiveDocument.Sections(1).Footers(wdHeaderFooterPrimary).PageNumbers_
```
0
0
复制全文
相关推荐










