2

我正在尝试根据 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。为什么会这样?

编辑:我不得不重新访问这个宏,在另一台机器上测试表明它也没有在那里运行。雪上加霜的是,宏将不再在我原来的测试环境中运行。
最后,我通过更改页面布局解决了这个问题,这样我就不再需要这个宏了(我使用边距设置中的“装订线”设置做了一个对称的页面布局)。
尽管如此,问题仍然存在:它看起来wdActiveEndPageNumber并不可靠。也许这与从标头调用此函数有关?

4

2 回答 2

2

wdActiveEndPageNumber 在Word 2002中有错误。

来自 MS 网站:

当满足以下所有条件时,可能会出现此问题:

  • 所选范围包含一个表格。

  • 分页符出现在表格行的中间。

  • 包含分页符的行中的最后一个单元格包含换行到新页面的文本。

也许您和您的 Word 版本也是如此。

于 2013-10-21T16:06:58.100 回答
2

-1由于未选择任何内容而返回。
页面布局似乎切换到草稿,而没有在第一次选择时实际选择任何内容。
也许您可以尝试通过在选择之前切换回布局来克服该错误:

oHeader.Range.Select
ActiveWindow.View = wdPrintView
oHeader.Range.Select
Selection.Information(wdActiveEndPageNumber)
于 2013-10-23T08:48:40.187 回答