Felder aktualisieren |
|
|||||||||||||||||||||||||||||||||
Mittels Felder lassen sich eine Vielzahl von sich ändernder Daten und Informationen in ein Dokument einfügen und verwenden. Die Felder werden dabei als Platzhalter für diese Daten verwendet, die sich entweder nur bei bestimmten Aktionen ändern (z.B. das Speicher-Datum) oder kontinuierlich aktualisieren, wenn sich die anzuzeigenden Informationen oder Daten ändern (z.B. das Inhaltsverzeichnis). Die Feldergebnisse werden dabei nicht automatisch geändertn, sondern die Aktualisierung muss initiiert werden. Dieses kann z.B. das Speichern des Dokumentes, das Ausdrucken oder die manuelle Aktualisierung mittels der Taste <F9> sein. ActiveDocument.Fields.Update Leider werden mit dieser Vorgehensweise nicht die Felder in den Kopf- und Fusszeilen berücksichtigt, da sie nicht im normalen Textbereich liegen. Die folgende Tabelle gibt einen Überblick über die verschiedenen Bereiche, mit welcher StoryRange-Konstanten sie angesprochen werden können und welchen Wert das NextStoryRange-Objekt besitzt:
Der Typ des StoryRanges lässt sich über die StoryTyp-Eigenschaft ermitteln. Das folgende Beispiel durchläuft das gesamte Dokument und aktualisiert alle Felder in allen Bereichen. Wichtig dabei ist die neue Zuweisung des nächsten StoryRange-Objekt an das zurückgegebene Range-Objekt (Zeile 8), damit das nächste identische StoryRange-Object gefunden und angesprochen werden kann. 1 Sub AlleFelderAktualisieren() 2 Dim rngDoc As Range 3 Dim oDoc As Document 4 Set oDoc = ActiveDocument 5 For Each rngDoc In oDoc.StoryRanges 6 rngDoc.Fields.Update 7 While Not (rngDoc.NextStoryRange Is Nothing) 8 Set rngDoc = rngDoc.NextStoryRange 9 rngDoc.Fields.Update 10 Wend 11 Next rngDoc 12 End Sub Besitzt das Dokument mehrere Abschnitte, muss um die For...Each-Schleife eine weitere Schleife eingefügt werden, in der alle Abschnitte durchlaufen werden. Das folgende Beispiel aktualisiert alle Kopfzeilen in einem Dokument mit unterschiedlichen geraden und ungeraden Seiten. In diesem Fall muss keine Zuweisung des nächsten StoryRange-Objektes erfolgen, da pro Abschnitt nur ein Objekt (gerade oder ungerade Kopfzeile) vorhanden ist. 1 Sub AlleFelderKopfzeilen() 2 Dim rngDoc As Range 3 Dim oDoc As Document 4 Dim docSec As Section 5 Set oDoc = ActiveDocument 6 For Each docSec In oDoc.Sections 7 For Each rngDoc In oDoc.StoryRanges 8 If rngDoc.StoryType = wdPrimaryHeaderStory Then 9 rngDoc.Fields.Update 10 ElseIf rngDoc.StoryType = wdEvenPagesHeaderStory Then 11 rngDoc.Fields.Update 12 End If 13 Next rngDoc 14 Next docSec 15 End Sub Eine Alternative zu dieser Aktualisierungs-Methode ist das Dokument in umgekehrter Reihenfolge auszudrucken bzw. die Option die Felder beim Drucken aktualisieren zu lassen. |
www.chf-online.de/vba/vbaaktualisieren.htm | © 2001-11 Christian Freßdorf (Zaphod-Systems) |