2013-10-14 70 views
1

我試圖處理基於在Word宏當前頁碼標題:wdActiveEndPageNumber返回負數

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是不可靠的。也許這是從頭來調用這個函數?

+1

關於'wdActiveEndPageNumber,http://support.microsoft.com/kb/241714顯示有與常見問題功能。 – Elias

回答

1

-1因爲沒有被選中而被返回。
看來,頁面佈局切換到草稿而不實際選擇第一個選擇上的任何東西。
或許你可以嘗試選擇的時候必須克服切換回佈局的bug:

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

我測試過了,可以確認頁面佈局切換到草稿。當我將代碼添加到我的宏中時,在命令「ActiveDocument.View = wdPrintView」中收到錯誤消息,說'對象不支持此屬性或方法'。當我將該行更改爲'ActiveWindow.View = wdPrintView'時,宏在我的系統和生產機器上均可正常工作。 – Hobbes

+0

好,它爲你工作。我編輯了你在我的示例中提到的代碼。 – Trace

1

wdActiveEndPageNumber在Word 2002中出現故障。

從MS網站:

  • 選定的範圍包含一個表:當所有的以下條件,則可能會發生

    此問題。

  • 分頁符出現在表格行的中間。

  • 包含分頁符的行中的最後一個單元格中包含換到一個新的網頁文字。

也許這種情況也適用於您和您的Word版本。