更新する方法が欲しい全て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
答え2
Ctrl+ -でAすべて選択し、それから F9ロットを更新します。
ただし、ヘッダーとフッターは表示されませんが、印刷/印刷プレビューを実行すると更新されます。
###アップデート
次のマクロを見つけました。簡単なテストでは、目次、段落内のフィールド、ヘッダーとフッター内のフィールド、フローティング テキスト ボックス図内のフィールドが更新されました。
これで必要なものがすべて網羅されていることを願っていますが、そうでない場合は、まだ更新に失敗しているのは何かを示してください。
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