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