Einfügen von Kopf- und Fußzeilen bei Auswahl aller (Microsoft Word)
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: