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


97

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
完全をDim toa As Word.TableOfAuthorities / For Each toa In ActiveDocument.TablesOfAuthorities / toa.Update / Next
期すために

Word 2013でこれを試してみたところ、まだ機能していることを確認しました。コードを提供してくれた@Gillesに感謝します!
ウゴ

印刷プレビューに戻り、ドキュメントに戻るマクロはどうですか?
Pedro77

@ Pedro77それはどのように役立つはずですか?少なくともWord 2013(Word 2007にアクセスできなくなった)では、印刷プレビューに行くか、印刷に関してはフィールドは更新されません。
ジル

少なくとも参照フィールドと相互参照フィールドのフィールドが更新されます。
Pedro77

回答:


37

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

そして、すべてのフィールドが更新されました!

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


2
現在、Word 2010で作業しています(設定は[ファイル]→[オプション]→[表示])。実際、オプションなしでは一部のフィールドが更新されますが、すべてではありません。Word 2007にはなかったと確信していますが、テストする必要はありません。
ジル

2
Word 2016 for Macを使用しています。設定は、Word->環境設定->印刷にあります。しかし、未亡人では、グローバル設定の印刷セクションに表示されます。私は過去にそこに行ったことがあると確信していますが、今のところテストするインストールがありません。
デビッドルーセル

これはWord 2016ではもう機能しないと思います
。– TCB13

これは、Windows 7上のWord 2016で機能しました
。– bouvierr

Word 2016 Windowsでは機能しません。フッターなどのフィールドは正しく更新されません。
ホッブズ

80

私はやるCtrl+ A-すべてを選択するために-と、その後 F9多くを更新します。

ただし、これではヘッダーとフッターが欠落しますが、IIRCを印刷/印刷プレビューすると更新されます。


更新

次のマクロが見つかりました。クイックテストでは、目次、段落内のフィールド、ヘッダーとフッター内のフィールド、およびフローティングテキストボックスの図内のフィールドを更新しました。

うまくいけば、必要なすべてがカバーされます。そうでない場合は、まだ更新に失敗しているものを示してください。

ソース: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

@Giles-OK、まあまあ、基本が最初に探求されていることを常に確認するのが最善です。私はちょうど今狩りをして、仕事をしているように見えるマクロを見つけました、私のアップデートをチェックして、それが何かを逃したかどうかを知らせてください。
DMA57361

今話しています!を使用して処理する場合NextStoryRangeと使用する場合document.StoryRangesが異なる理由はわかりませんが、既に更新したテーブル更新と組み合わせたコードが勝者になります(ほとんど、しかし、それは別の問題です)。
ジル

これは、ヘッダー/フッターに含まれるテキストボックスに含まれるフィールドでは機能しません。Word 2016
slobo

5

このページは面白そうです:

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

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


4

Word 2010:

リボンを右クリックして、リボンをカスタマイズし、「すべてのコマンド」からコマンドを選択して「更新」を検索し、必要な場所に追加します。

このボタンは、選択したフィールドのみを更新します。
次に、すべてのフィールドを更新するには、Ctrl+ Aを押してからこのボタンを押します。


押すとどう違いますF9か?それは実際に図や表などの内部で更新されますか?
ジル

1
Word 2013ができたので、確認しました。これは、F9キーを押した場合と同じように見えます。この質問をする主な動機は、図内のフィールドを更新しないことです。
ジル

3

すべてのヘッダーとフッターを適切に更新したい場合、これは私のために働いた:

    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

これは受け入れられた答えをどのように改善しますか?図のテキストボックスのフィールドを更新しますか?
ジル

2

C#の場合:

using System;
using System.Collections.Generic;
using System.IO;
using Microsoft.Office.Interop.Word;

class Program
{
    static void Main(string[] args)
    {
        List<string> path = new List<string>(args);

        string filePathstr = string.Join(" ", path.ToArray());
        //System.Windows.Forms.MessageBox.Show("filepathstr: " + filePathstr);

        string folderPathstr = Path.GetDirectoryName(filePathstr);
        //System.Windows.Forms.MessageBox.Show("folderPathstr: " + folderPathstr);

        try
        {
            Application ap = new Application();
            Document document = ap.Documents.Open(filePathstr);
            document.Fields.Update();

            foreach (Section section in document.Sections)
            {
                document.Fields.Update();  // update each section

                HeadersFooters headers = section.Headers;  //Get all headers
                foreach (HeaderFooter header in headers)
                {
                    Fields fields = header.Range.Fields;
                    foreach (Field field in fields)
                    {
                        field.Update();  // update all fields in headers
                    }
                }

                HeadersFooters footers = section.Footers;  //Get all footers
                foreach (HeaderFooter footer in footers)
                {
                    Fields fields = footer.Range.Fields;
                    foreach (Field field in fields)
                    {
                        field.Update();  //update all fields in footers
                    }
                }
            }    

            document.Save();
            document.Close();

        }
        catch (NullReferenceException)
        {
            System.Windows.Forms.MessageBox.Show("A valid file was not selected.");
        }
    }
}
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.