Wie aktualisiere ich alle Felder in einem Word-Dokument?

Ich möchte eine Möglichkeit, alle Felder in einem Word 2013-Dokument zu aktualisieren. (Wenn es in anderen Versionen funktioniert, umso besser; Ich hatte ursprünglich dieses Problem mit Word 2007, und seitdem scheint sich nichts geändert zu haben.) Dazu gehören Querverweise,Seitenzahlen, Inhaltsverzeichnisse, Indizes, Kopfzeilen usw. Wenn es durch Drücken von F9 aktualisiert werden kann, möchte ich es aktualisieren.

(Theoretisch kann das Aktualisieren von Feldern dazu führen, dass andere Felder aktualisiert werden müssen, z. B. eine längere Tabelle von inhalt ändert einige Seitenzahlen im Haupttext. Sich um die häufigen Fälle zu kümmern, ist gut genug für mich. Tatsächlich ist es in Ordnung, wenn ich das Makro zwei-oder dreimal ausführen muss, bevor es sich stabilisiert. Ich möchte nur ein einzelnes Makro haben, das alles findet.)

Mein bisheriger Versuch aktualisiert keine Felder in Textfeldern in Zahlen. Wie aktualisiere ich sie und was habe ich noch verpasst?


EDIT: Die Kombination der Antwort mit dem, was ich bereits hatte, ergibt ein Makro, das zu sein scheint aktualisieren Sie alles (mit einem bekannten Defekt ).

'' 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
Author: Community, 2010-10-06

6 answers

Gehen Sie in die Druckeinstellungen und wählen Sie Felder aktualisieren. Gehen Sie dann zu Drucken oder drucken Vorschau Ihres doc.

Et voilà, alle Felder werden aktualisiert!

MS Word Druckoptionen von Word von Mac 2016

 38
Author: David Roussel,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-05-31 08:30:16

Ich mache einfach Strg+A - um alles auszuwählen-und dann F9, um das Los zu aktualisieren.

Dies vermisst zwar Kopf-und Fußzeilen, diese werden jedoch aktualisiert, wenn Sie IIRC drucken/drucken-Vorschau anzeigen.


Aktualisieren

Ich habe das folgende Makro gefunden. Bei einem Schnelltest wurden Inhaltsverzeichnisse, Felder in Absätzen, Felder in der Kopf-und Fußzeile sowie Felder in einer schwebenden Textfeldfigur aktualisiert.

Hoffentlich deckt das alles ab dass Sie brauchen, wenn nicht, geben Sie bitte an, was immer noch nicht aktualisiert wird.

Quelle: 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
Author: DMA57361,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-10-07 08:10:07

Diese Seite sieht interessant aus:

Wenn Sie Word 2007 verwenden, ist die prozess ist ein bisschen anders: Klicken Sie auf die Office-Taste und klicken Sie dann auf Word Option. Word zeigt das Wort an Dialogfeld "Optionen". Klicken Sie auf Erweitert auf der linken Seite des Dialogfelds. (Klicken Sie hier, um eine verwandte Figur zu sehen.) Im Allgemeinen Bereich (scrollen Sie ein wenig nach unten um es zu sehen), stellen Sie sicher, dass das Update Automatische Links bei geöffnetem Kontrollkästchen ist ausgew. Klicken Sie auf OK. Diese Einstellung sollte sicherstellen , dass alle Ihre links sind immer auf dem neuesten Stand. Wenn Sie wollen aktualisieren Sie die Felder, wenn das Dokument geöffnet, müssen Sie ein Makro verwenden, um erfülle die Aufgabe. Speziell, sie müssen entweder einen AutoOpen verwenden oder AutoClose-makro, je nach ob Sie die Felder aktualisieren möchten wenn das Dokument geöffnet oder geschlossen wird. Der es folgt ein Beispiel für einen AutoOpen makro können Sie verwenden.

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

Beachten Sie, dass das Makro sicherstellt dass die Optionen auf Kraft gesetzt sind aktualisieren der Felder und Links, wenn drucken erfolgt, dann aktualisiert es alle die Mitglieder der Fields-Sammlung im Dokument. Wenn Sie, stattdessen, wollte die Felder unter aktualisieren schließen, könnten Sie dieses Makro verwenden:

Sub AutoClose()
    ActiveDocument.Fields.Update
End Sub

Dieses makro ist viel kürzer, da es besteht keine notwendigkeit, die update-on-print-Optionen, wenn Sie beenden des Dokuments.beenden des Dokuments.

 5
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2010-10-07 02:18:12

Word 2010:

Klicken Sie mit der rechten Maustaste auf das Menüband, passen Sie das Menüband an und wählen Sie Befehl aus " alle Befehle" suchen Sie nach "update" und fügen Sie es wo Sie wollen.

Diese Schaltfläche aktualisiert nur ausgewählte Felder.
Um alle Felder zu aktualisieren, drücken Sie Strg + A dann diese Schaltfläche.

 3
Author: rlaviolette,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2013-07-18 20:18:06

Wenn Sie alle Kopf-und Fußzeilen ordnungsgemäß aktualisieren möchten, hat dies bei mir funktioniert:

    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
Author: Yohnny,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-02-18 19:32:08

Für 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
Author: Sherd,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2016-12-07 16:16:06