wdActiveEndPageNumber返回一个负数

时间:2013-10-14 15:19:38

标签: vba word-vba

我正在尝试根据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不可靠。也许这是从标题中调用此函数?

2 个答案:

答案 0 :(得分:1)

wdActiveEndPageNumber在Word 2002中出错了。

来自MS网站:

  

满足以下所有条件时可能会发生此问题:

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

     
      
  • 在表格行的中间发生分页。
  •   
     

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

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

答案 1 :(得分:1)

由于未选择任何内容,因此返回

-1 看起来页面布局切换到草稿而没有在第一个选择上实际选择任何内容 也许您可以尝试通过在选择之前切换布局来克服错误:

oHeader.Range.Select
ActiveWindow.View = wdPrintView
oHeader.Range.Select
Selection.Information(wdActiveEndPageNumber)