我正在尝试根据Word宏中的当前页码处理标题:
Sub InsertHeader()
Dim oShape As Shape
Dim PageNumber As Integer
Dim oSection As Section
Dim oHeader As HeaderFooter
For Each oSection In ActiveDocument.Sections
If oSection.Index > 1 Then
For Each oHeader In oSection.Headers
oHeader.Range.Select
PageNumber = Selection.Information(wdActiveEndPageNumber)
If oHeader.Exists Then
Select Case oHeader.Index
Case Is = wdHeaderFooterFirstPage
If PageNumber Mod 2 = 0 Then
ActiveDocument.AttachedTemplate.AutoTextEntries("HeaderFirst"). _
Insert Where:=Selection.Range
oHeader.Range.Select
Selection.Range.ShapeRange.Left = CentimetersToPoints(2.26)
End If
If PageNumber Mod 2 = 1 Then
ActiveDocument.AttachedTemplate.AutoTextEntries("HeaderFirst"). _
Insert Where:=Selection.Range
End If
End Select
End If
Next oHeader
End If
Next oSection
End Sub
当我在本地执行此操作时,宏工作正常。但是当我在从网络驱动器打开的文档上运行相同的宏时,宏会失败,因为PageNumber
的值为-1。为什么会这样?
编辑:我不得不重新访问这个宏,在另一台机器上测试显示它也没有在那里运行。为了增加对伤害的侮辱,宏在我原来的测试环境中不再运行了
最后我通过更改页面布局解决了这个问题,所以我不再需要这个宏了(我在边距设置中使用'gutter'设置制作了对称的页面布局)。
不过,问题仍然存在:看起来wdActiveEndPageNumber
不可靠。也许这是从标题中调用此函数?
答案 0 :(得分:1)
wdActiveEndPageNumber在Word 2002中出错了。
来自MS网站:
满足以下所有条件时可能会发生此问题:
- 所选范围包含一个表格。
和
- 在表格行的中间发生分页。
和
- 包含分页符的行中的最后一个单元格包含换行到新页面的文本。
也许您和您的Word版本也是如此。
答案 1 :(得分:1)
-1
看起来页面布局切换到草稿而没有在第一个选择上实际选择任何内容
也许您可以尝试通过在选择之前切换布局来克服错误:
oHeader.Range.Select
ActiveWindow.View = wdPrintView
oHeader.Range.Select
Selection.Information(wdActiveEndPageNumber)