Aktuelle Seite:
/vba/vbatoc.htm
Letzte Änderung: 24.01.2008

Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003Getestet unter Word2007  
Beispiel anzeigen
Makro/Datei speichern
Print

Bekanntermaßen lassen sich in einem Dokument mehrere Inhaltsverzeichnisse (IHV) einfügen, indem z.B. unerschiedliche, spezielle Formatvorlagen für ein jedes IHV angegeben werden. Auch kann ein IHV nur für einen Textmarkenbereich erstellt werden.

Die Inhaltsverzeichnisseinträge selbst lassen sich durch Anpassen der Formatvorlagen Verzeichnis 1-Verzeichnis 9 an eigene Vorstellungen ändern. Allerdings betrifft dies immer die gesamte Zeile. Ein Ändern z.B. nur der Seitenzahl ist auf diesem Weg nicht möglich.

Dieses Beispiel zeigt nun ein paar Möglichkeiten auf, wie man unterschiedliche IHV individuell ansprechen und formatieren kann. So lässt sich für das erste IHV z.B. die Seitenzahl einheitlich fett formatieren, auch wenn der Eintragstext nicht-fett in der Formatvorlage eingestellt ist. Und bei einem zweiten IHV lassen sich die Seitenzahlen ausblenden, wenn z.B. im Ausdruck noch zusätzliche Seiten dazwischengeheftet werden sollen.

Mit diesem vorliegenden Beispiel lassen sich nun für jedes IHV eines Dokumentes die Seitenzahlen folgendermaßen formatieren:

  • Schriftgröße
  • Fett
  • Kursiv
  • Ausgeblendet

Voraussetzung ist dabei, dass die Seitenangabe im IHV verwendet wird; dies wird in dem Beispiel automatisch eingestellt.

Code markieren
Function formatTOC(oDoc As Document, _  
  iTOC As Integer, _  
  bBold As Boolean, _  
  bItalic As Boolean, _  
  bHidden As Boolean, _  
  lngFont As Integer)  
' Funktion zum Formatieren des IHV  
Dim oHyp As Hyperlink
Dim oPara As Paragraph
Dim rng As Range, rngt As Range
Dim iCount As Integer
Dim oToc As TableOfContents
Const c_Titel As String = "TOC auswählen"
Set oDoc = ActiveDocument
If oDoc.TablesOfContents.Count = 0 Then
  MsgBox "Kein Inhaltsverzeichnis vorhanden!", vbInformation, c_Titel
  Exit Function  
Else
  Set oToc = ActiveDocument.TablesOfContents(iTOC)
End If
' IHV mit Seitenzahlen rechts versehen  
With oToc
  .IncludePageNumbers = True
  .RightAlignPageNumbers = True
  .Update
End With
' Verzeichniseinträge als Hyperlink?  
If oToc.Range.Hyperlinks.Count = 0 Then
  ' Alle Absätze durchlaufen  
  For Each oPara In oToc.Range.Paragraphs
    iCount = oPara.Range.Words.Count
    If iCount > 1 Then
        oPara.Range.Words(iCount - 1).Font.Bold = bBold
        oPara.Range.Words(iCount - 1).Font.Italic = bItalic
        oPara.Range.Words(iCount - 1).Font.Hidden = bHidden
        If lngFont > 0 Then
          oPara.Range.Words(iCount - 1).Font.Size = lngFont
        End If
    End If
  Next oPara
Else
  ' Alle Hyperlinks durchlaufen  
  For Each oHyp In oToc.Range.Hyperlinks
    For Each oPara In oHyp.Range.Paragraphs
      iCount = oPara.Range.Words.Count
      If iCount > 1 Then
        oPara.Range.Words(iCount - 1).Font.Bold = bBold
        oPara.Range.Words(iCount - 1).Font.Italic = bItalic
        oPara.Range.Words(iCount - 1).Font.Hidden = bHidden
        If lngFont > 0 Then
          oPara.Range.Words(iCount - 1).Font.Size = lngFont
        End If
      End If
    Next oPara
  Next oHyp
End If
End Function 

Um die Seitenangaben eines IHV bearbeiten zu können, wird für jede Eintragszeile das vorletzte Wort ermittelt und entsprechend der Vorgaben formatiert (fett, kursiv, ausgeblendet, Schriftgröße). Es muss das vorletzte Wort sein, da das letzte Wort das Absatzzeichen des Eintrags darstellt.
Liegen die Eintragszeilend es IHV als Hyperlinks vor, wird zuerst überprüft, wird für jeden Hyperlink überprüft, ob der Absatz mehr als ein Wort hat - und somit kein leerer Absatz ist. Anschließend wird wieder das vorletzte Wort entsprechend formatiert.


 www.chf-online.de/vba/vbatoc.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)