Word文書内のすべてのフィールドを更新するには?

field-codes microsoft-word

私はWord 2013の文書内のすべてのフィールドを更新する方法が欲しいです。(他のバージョンでも動作するのであれば、それはそれで良いのですが、私はもともとWord 2007でこの問題を抱えていましたが、それ以来、何も変わっていないようです)。これには相互参照、ページ番号、目次、索引、ヘッダーなどが含まれます。F9を押すことで更新できるのであれば、更新してほしい

(理論的には、フィールドを更新すると、他のフィールドも更新が必要になる可能性があります。例えば、目次が長くなると本文のページ番号が変わったりします。このような一般的なケースに対処することで、私には十分です。実際、マクロが安定するまでに2~3回実行しなければならない場合でも大丈夫です。ただ、1つのマクロで全てを検索できるようにして欲しいですね(笑)

私のこれまでの試みは、図の中のテキストボックスのフィールドを更新しません。どうやって更新すればいいのでしょうか?


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

'' 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

  101  Gilles ‘SO- stop being evil’  2010-10-06


ベストアンサー

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

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

MS Word Print Options from Word of Mac 2016

38  David Roussel  2015-09-15


私は、Ctrl+A – すべてを選択して、F9でロットを更新するだけです

しかし、これはヘッダとフッタを見逃していますが、それらは印刷/印刷プレビュー時に更新されます


Update

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

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

ソースは以下の通りです。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

84  DMA57361  2010-10-06


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

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

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

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

Sub AutoClose()
ActiveDocument.Fields.Update
End Sub

このマクロは、document.exiting the documentを終了しているときに、update-on-printオプションを設定する必要がないので、はるかに短いです

5  None  2010-10-07


Word 2010:

リボンを右クリックし、リボンをカスタマイズし、”すべてのコマンド “からコマンドを選択し、”更新 “を検索して、お好きな場所に追加します

このボタンは選択されたフィールドのみを更新します。 全てのフィールドを更新する場合は、Ctrl + Aを押してからこのボタンを押してください

3  rlaviolette  2013-07-18


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

    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

3  Yohnny  2015-02-18


For 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.");
}
}
}

2  Sherd  2016-06-15


タイトルとURLをコピーしました