In Felder aktualisieren
und Felder aktualisieren (II)
habe ich Makros vorgestellt, mit denen sich alle Felder in den verschiedenen Bereichen eines Dokumentes aktualisieren lassen.
Das folgende erweiterte Beispiel aktualisiert nun neben dem gesamten Dokument (inkl. Kopf- und Fußzeilen) auch die vorhandenen
Inhaltsverzeichnisse TablesOfContents. Über eine Konstante bTOCNeu kann
dabei am Anfang festgelegt werden, ob das Inhaltsverzeichnis neu erstellt werden soll, oder ob nur die Seitenzahlen aktualisiert werden sollen.
' Legt fest ob das Inhaltsverzeichnis (TOC) neu erstellt (True)
' oder ob nur die Seitenzahlen aktualisiert werden sollen (False)
Const bTOCNeu As Boolean = False
Sub AlleFelderAktualisierenMitTOC()
If Documents.Count = 0 Then Exit Sub
Dim rngDoc As Range
Dim aField As Field
Dim oDoc As Document
Dim oTOC As TableOfContents
Dim docSec As Section
Dim bProtect As Boolean
Dim intProtectType As Integer
bProtect = False
Set oDoc = ActiveDocument
' Dokumentschutz prüfen und merken
If oDoc.ProtectionType = wdNoProtection Then
bProtect = False
Else
bProtect = True
intProtectType = oDoc.ProtectionType
ActiveDocument.Unprotect
End If
' Alle Abschnitte mit allen Bereichen durchlaufen
For Each docSec In oDoc.Sections
For Each rngDoc In oDoc.StoryRanges
rngDoc.Fields.Update
While Not (rngDoc.NextStoryRange Is Nothing)
Set rngDoc = rngDoc.NextStoryRange
rngDoc.Fields.Update
Wend
Next rngDoc
Next docSec
If bTOCNeu = False Then
' Inhaltsverzeichnisse: nur Seiten aktualisieren
If oDoc.TablesOfContents.Count > 0 Then
For Each oTOC In oDoc.TablesOfContents
oTOC.UpdatePageNumbers
Next oTOC
End If
Else
' Inhaltsverzeichnisse: neu erstellen
If oDoc.TablesOfContents.Count > 0 Then
For Each oTOC In oDoc.TablesOfContents
oTOC.Update
Next oTOC
End If
End If
' Dokumentschutz ggf. wieder setzen
If bProtect = False Then
Exit Sub
Else
ActiveDocument.Protect intProtectType, True
End If
End Sub
|