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

Word 2002では、wdActiveEndPageNumber にバグがありました。

MS の Web サイトから:

この問題は、次のすべての条件に該当する場合に発生する可能性があります。

  • 選択した範囲にテーブルが含まれています。

  • 表の行の途中で改ページが発生します。

  • 改ページを含む行の最後のセルには、新しいページに折り返すテキストが含まれています。

おそらく、これはあなたとあなたのバージョンの Word にも当てはまります。

于 2013-10-21T16:06:58.100 に答える