Aktuelle Seite:
/vba/vbaaktualisieren.htm
Letzte Änderung: 24.06.2006

Getestet unter Word2000Getestet unter WordXP  
Makro/Datei speichern
Print

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.
Möchte man alle Felder im Dokument auf einmal aktualisieren, genügt es normalerweise, das gesamte Dokument zu markieren und dann <F9> zu drücken.

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.
Word unterscheidet nämlich zwischen verschiedenen "Dokumentkomponenten" (StoryRanges), denen alle Bereiche eines Dokumentes zugeordnet sind.
Um jetzt alle Dokumentkomponenten zu berücksichtigen, müssen alle StoryRange-Objekte einzeln aktualisiert werden. Dazu werden alle Bereiche durchlaufen und gezielt die vorhandenen Felder in diesem Bereich aktualisiert.

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:

Art der DokumentkomponenteRückgabewert NextStoryRange
wdMainTextStory
wdFootnotesStory
wdEndnotesStory
wdCommentsStory
Hauptdokumentbereich
Fussnotenbereich
Endnotenbereich
Kommentarbereich
Gibt immer Nothing zurück
wdTextFrameStoryTextfeldbereich Die Dokumentkomponente des nächsten Satzes von verknüpften Textfeldern
wdFirstPageHeaderStory
wdFirstPageFooterStory
wdPrimaryHeaderStory
wdPrimaryFooterStory
wdEvenPagesHeaderStory
wdEvenPagesFooterStory
Kopfzeile 1.Seite
Fusszeile 1.Seite
Kopfzeile ungerade Seiten
Fusszeile ungerade Seiten
Kopfzeile gerade Seiten
Fusszeile gerade Seiten
Die Dokumentkomponente des nächsten Abschnitts derselben Art

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)