Word 文書内のすべてのフィールドを更新するにはどうすればよいですか?

Word 文書内のすべてのフィールドを更新するにはどうすればよいですか?

更新する方法が欲しい全てWord 2013 文書内のフィールドです。(他のバージョンでも機能するのであればなおさらです。この問題はもともと Word 2007 で発生しましたが、それ以降何も変わっていないようです。) これには、相互参照、ページ番号、目次、索引、ヘッダーなどが含まれます。 を押して更新できる場合はF9、更新してほしいです。

(理論上、フィールドを更新すると、他のフィールドも更新する必要が生じる可能性があります。たとえば、目次が長くなると、本文のページ番号が一部変更されます。一般的なケースに対応すれば十分です。実際、安定するまでにマクロを 2 回または 3 回実行する必要があっても問題ありません。すべてを検索する単一のマクロがあればよいのです。)

これまでの試みでは、図の中のテキスト ボックスのフィールドが更新されません。 どうすれば更新できますか。他に見落としている点はありますか。


編集: 与えられた答えと私がすでに持っていたものを組み合わせると、すべてを更新するマクロが得られます(既知の欠陥)。

'' Update all the fields, indexes, etc. in the specified document.
Sub UpdateAllFieldsIn(doc As Document)
    '' Update tables. We do this first so that they contain all necessary
    '' entries and so extend to their final number of pages.
    Dim toc As TableOfContents
    For Each toc In doc.TablesOfContents
        toc.Update
    Next toc
    Dim tof As TableOfFigures
    For Each tof In doc.TablesOfFigures
        tof.Update
    Next tof
    '' Update fields everywhere. This includes updates of page numbers in
    '' tables (but would not add or remove entries). This also takes care of
    '' all index updates.
    Dim sr As range
    For Each sr In doc.StoryRanges
        sr.Fields.Update
        While Not (sr.NextStoryRange Is Nothing)
            Set sr = sr.NextStoryRange
            '' FIXME: for footnotes, endnotes and comments, I get a pop-up
            '' "Word cannot undo this action. Do you want to continue?"
            sr.Fields.Update
        Wend
    Next sr
End Sub
'' Update all the fields, indexes, etc. in the active document.
'' This is a parameterless subroutine so that it can be used interactively.
Sub UpdateAllFields()
    UpdateAllFieldsIn ActiveDocument
End Sub

答え1

印刷設定に移動し、フィールドの更新を選択します。次に、印刷するか、ドキュメントの印刷プレビューを表示します。

すると、すべてのフィールドが更新されました。

Word of Mac 2016 の MS Word 印刷オプション

答え2

Ctrl+ -でAすべて選択し、それから F9ロットを更新します。

ただし、ヘッダーとフッターは表示されませんが、印刷/印刷プレビューを実行すると更新されます。


###アップデート

次のマクロを見つけました。簡単なテストでは、目次、段落内のフィールド、ヘッダーとフッター内のフィールド、フローティング テキスト ボックス図内のフィールドが更新されました。

これで必要なものがすべて網羅されていることを願っていますが、そうでない場合は、まだ更新に失敗しているのは何かを示してください。

ソース:http://www.gmayor.com/installing_macro.htm

Sub UpdateAll()
    Dim oStory As Range
    For Each oStory In ActiveDocument.StoryRanges
        oStory.Fields.Update
        If oStory.StoryType <> wdMainTextStory Then
            While Not (oStory.NextStoryRange Is Nothing)
                Set oStory = oStory.NextStoryRange
                oStory.Fields.Update
            Wend
        End If
    Next oStory
    Set oStory = Nothing
End Sub

答え3

これページ面白そうですね:

Word 2007 を使用している場合、手順は少し異なります。Office ボタンをクリックし、[Word のオプション] をクリックします。Word の [Word のオプション] ダイアログ ボックスが表示されます。ダイアログ ボックスの左側にある [詳細設定] をクリックします (関連する図を表示するには、ここをクリックしてください)。[全般] 領域 (少し下にスクロールすると表示されます) で、[開くときにリンクを自動的に更新する] チェック ボックスがオンになっていることを確認します。[OK] をクリックします。この設定により、すべてのリンクが常に最新の状態になります。ドキュメントを開いたときにフィールドを更新する場合は、マクロを使用してタスクを実行する必要があります。具体的には、ドキュメントを開いたときと閉じたときのどちらでフィールドを更新するかによって、AutoOpen マクロまたは AutoClose マクロを使用する必要があります。次に、使用できる AutoOpen マクロの例を示します。

Sub AutoOpen()
    With Options
        .UpdateFieldsAtPrint = True
        .UpdateLinksAtPrint = True
    End With
    ActiveDocument.Fields.Update
End Sub

マクロは、印刷時にフィールドとリンクを強制的に更新するようにオプションが設定されていることを確認してから、ドキュメント内の Fields コレクションのすべてのメンバーを更新することに注意してください。代わりに、閉じるときにフィールドを更新したい場合は、次のマクロを使用できます。

Sub AutoClose()
    ActiveDocument.Fields.Update
End Sub

このマクロは、ドキュメントを終了するときに印刷時の更新オプションを設定する必要がないため、はるかに短くなります。

答え4

すべてのヘッダーとフッターを適切に更新したい場合は、次の方法が効果的です:

    Dim oStory As Range
    Dim oSection As Object
    Dim oHeader As Object
    Dim oFooter As Object

    For Each oStory In ActiveDocument.StoryRanges
        oStory.Fields.Update
    Next oStory

        For Each oSection In ActiveDocument.Sections
             For Each oHeader In oSection.Headers
                 oHeader.Range.Fields.Update
             Next oHeader
            
             For Each oFooter In oSection.Footers
                 oFooter.Range.Fields.Update
             Next oFooter
        Next oSection

関連情報