2
www.ChF-Online.de  

Felder aktualisieren

   Neuigkeiten
   API-Aufrufe in VBA
   VBA2HTML
   Word
   Word-VBA
 Verschiedenes
aktiv aktiv Feld-Arbeiten
aktiv  Felder aktualisieren
 Felder aktualisieren (II)
 Felder aktualisieren (III)
 Feldfunktion darstellen
 Formularfelder (I)
 Formluarfelder formatieren
 Formularfelder kopieren
 IHV formatieren
 Aktuelle Kalenderwoche
 Formular-QuickInfos
 Verkn. Dateien drucken
 Form-Sachen
 Menü-/Symbolleisten
 VBA und Lotus Notes
 VBA und Mail
 Inside VBAIDE
 Von Word nach Outlook
 Fix-und-Fertiges/Projekte
   Word2007 (RibbonX)
   Word2010 (RibbonX)
   Outlook-VBA
   Links zu VB(A)
   DocToHelp
   Netport Express XL
   Astronomie
   Gästebuch
   Volltextsuche
   Sitemap
   Buch:Word-Programmierung
   Impressum & Kontakt
   Datenschutzerklärung
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.


 Besucher: 0 online  |  0 heute  |  0 diesen Monat  |  2227138 insgesamt | Seitenaufrufe: 37   Letzte Änderung: 24.06.2006 © 2001-18 Christian Freßdorf
  Wer sich nicht selbst helfen will, dem kann niemand helfen.
Pestalozzi
 powered by phpCMS and PAX