Tim hat ein einfaches Makro erstellt, um alle Felder in einer Vorlage zu aktualisieren. Das Makro enthält einen Schritt, der das gesamte Dokument auswählt, ähnlich wie Strg + A. In diesem Schritt werden keine Kopf- und Fußzeilen ausgewählt, und Tim befürchtet, dass an diesen Stellen möglicherweise Felder aktualisiert werden müssen. Er fragt sich, ob es eine Möglichkeit gibt, Kopf- und Fußzeilen in die Auswahl aller einzubeziehen, oder ob es für sein Makro eine andere Möglichkeit gibt, die Felder in den Kopf- oder Fußzeilenbereichen zu aktualisieren.

Die einfache Antwort lautet, dass Sie Ihren Makrocode so ändern müssen, dass er in allen verschiedenen Word-Bereichen nach Feldern aussieht. Das Problem bei der Verwendung eines Ansatzes „Alle auswählen“ besteht darin, dass nur Text im Hauptdokument ausgewählt wird. Kopf- und Fußzeilen sowie eine Vielzahl anderer Elemente werden in separaten Ebenen verwaltet, sodass sie nicht mit dem gesamten Text des Dokuments ausgewählt werden können.

Wenn Sie lediglich Felder im Haupttext sowie in den Kopf- und Fußzeilen aktualisieren möchten, sollten Sie eine Technik wie die folgende verwenden:

Sub MyUpdateFields1()

ActiveDocument.StoryRanges(wdMainTextStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryFooterStory).Fields.Update     ActiveDocument.StoryRanges(wdPrimaryHeaderStory).Fields.Update End Sub

Beachten Sie, dass die verschiedenen Ebenen eines Dokuments als „Geschichten“ bezeichnet und in ihrer eigenen Sammlung verwaltet werden. Während dieses einfache Makro die Felder in den Storys, die den Haupttext, die Fußzeilen und die Überschriften enthalten, sehr schnell aktualisiert, gibt es andere Storys (Ebenen)

wo es Felder geben könnte, die aktualisiert werden müssen. Das folgende Makro durchsucht jede Story unabhängig von ihrem Typ und führt die erforderliche Aktualisierung durch:

Sub MyUpdateFields2()

Dim story As Word.Range

For Each story In ActiveDocument.StoryRanges         Do             story.Fields.Update             ' Check linked stories as linked stories are not independent             Set story = story.NextStoryRange         Loop Until (story Is Nothing)

Next End Sub

Wenn Sie jedoch wirklich vollständig sein möchten, gibt es mehr als nur die verschiedenen Story-Ebenen, die Sie durchsehen müssen. Beispielsweise können in Textfeldern einige Felder enthalten sein, die aktualisiert werden müssen. Ein umfassenderes Makro ist erforderlich, um all diese anderen Stellen zu behandeln, an denen sich Felder befinden könnten. Beachten Sie im folgenden Beispiel die vielen verschiedenen Elemente des Dokuments, die auf Felder überprüft werden können.

Sub MyUpdateFields3()

Dim doc As Document ' Pointer to Active Document     Dim wnd As Window ' Pointer to Document's Window     Dim lngMain As Long ' Main Pane Type Holder     Dim lngSplit As Long ' Split Type Holder     Dim lngActPane As Long ' ActivePane Number     Dim rngStory As Range ' Range Objwct for Looping through Stories     Dim TOC As TableOfContents ' Table of Contents Object     Dim TOA As TableOfAuthorities 'Table of Authorities Object     Dim TOF As TableOfFigures 'Table of Figures Object     Dim shp As Shape

' Set Objects     Set doc = ActiveDocument     Set wnd = ActiveDocument.ActiveWindow

' get Active Pane Number     lngActPane = wnd.ActivePane.Index

' Hold View Type of Main pane     lngMain = wnd.Panes(1).View.Type

' Hold SplitSpecial     lngSplit = wnd.View.SplitSpecial

' Get Rid of any split     wnd.View.SplitSpecial = wdPaneNone

' Set View to Normal     wnd.View.Type = wdNormalView

' Loop through each story in doc to update     For Each rngStory In doc.StoryRanges         If rngStory.StoryType = wdCommentsStory Then             Application.DisplayAlerts = wdAlertsNone             ' Update fields             rngStory.Fields.Update             Application.DisplayAlerts = wdAlertsAll         Else            ' Update fields            rngStory.Fields.Update         End If     Next

For Each shp In doc.Shapes         With shp.TextFrame             If .HasText Then                 shp.TextFrame.TextRange.Fields.Update             End If         End With     Next

' Loop through TOC and update     For Each TOC In doc.TablesOfContents         TOC.Update     Next

' Loop through TOA and update     For Each TOA In doc.TablesOfAuthorities         TOA.Update     Next

' Loop through TOF and update     For Each TOF In doc.TablesOfFigures         TOF.Update     Next

' Return Split to original state     wnd.View.SplitSpecial = lngSplit

' Return main pane to original state     wnd.Panes(1).View.Type = lngMain

' Active proper pane     wnd.Panes(lngActPane).Activate

' Close and release all pointers     Set wnd = Nothing     Set doc = Nothing End Sub

WordTips ist Ihre Quelle für kostengünstige Microsoft Word-Schulungen.

(Microsoft Word ist die weltweit beliebteste Textverarbeitungssoftware.) Dieser Tipp (11489) gilt für Microsoft Word 2007 und 2010. Eine Version dieses Tipps für die ältere Menüoberfläche von Word finden Sie hier: