Stichwortverzeichnis mit Hilfe eines Makros erzeugen

Umfangreiche Texte verfügen normalerweise über ein Stichwortverzeichnis. Leider besitzt Word auch in der aktuellen Version keine leicht zu bedienende Funktion zum Erstellen eines Stichwortverzeichnisses. Es existiert zwar eine Index-Funktion, die aber für das Anlegen eines klassischen Stichwortverzeichnisses nicht gut geeignet ist.

Eine andere Möglichkeit besteht darin, die einzelnen Wörter dieses Verzeichnisses mit der Suchfunktion aufzuspüren und die entsprechenden Seitenzahlen "zu Fuß" einzutragen. Auch diese Variante ist aber nicht gerade die optimale Lösung. Wesentlich schneller können Sie ein Stichwortverzeichnis mit dem abgebildeten Makro erzeugen. Im Menü »Extras | Makro | Makros« vergeben Sie als »Makroname« die Bezeichnung »Stichwort« und »Erstellen« dieses Makro indem Sie das nebenstehende Listing abtippen.

Nach der Fertigstellung eines Dokuments, zu dem Sie ein Stichwortverzeichnis anlegen wollen, müssen Sie zuerst drei Textmarken definieren. Normalerweise werden nur die Wörter eines Textes in das Stichwortverzeichnis aufgenommen, die sich im Hauptteil des Dokuments befinden. Vorwort, Inhaltsverzeichnis und Anhang werden dabei nicht berücksichtigt. Um dem Makro mitzuteilen, wo denn nun der Hauptteil beginnt und wo er endet, müssen Sie die erwähnten Textmarken festlegen. Vor dem ersten Wort des Hauptteils fügen Sie die Textmarke »Startseite« ein, nach dem letzten relevanten Wort die Textmarke »Endeseite«. Schließlich definieren Sie noch an der Stelle, an der das Stichwortverzeichnis angelegt werden soll die Textmarke »Stichwortverzeichnis«.

Um ein Wort in das Stichwortverzeichnis aufzunehmen, markieren Sie es und starten dann das Makro. Das Makro durchforstet nun den Bereich zwischen »Startseite« und »Endeseite« nach diesem Wort und erzeugt einen entsprechenden Eintrag im Stichwortverzeichnis. Schließlich springt das Makro wieder an die Stelle des Textes zurück, an der es aufgerufen wurde.

Das Makro erkennt auch aufeinanderfolgende Seiten und kennzeichnet die Einträge des Stichwortverzeichnis entsprechend. Befindet sich in einem Dokument zum Beispiel das Wort »Erdbeertorte« auf den Seiten 2, 6, 7, 11, 17, 18 und 19 so erscheint im Stichwortverzeichnis der Eintrag »Erdbeertorte 2, 6f, 11, 17ff«. So erzeugen Sie schnell und unkompliziert ein Stichwortverzeichnis, dessen Inhalt Sie nur noch alphabetisch sortieren müssen.

Makro zum Anlegen eines Stichwortverzeichnisses:

Sub Stichwort()

Dim Eintrag As String æ Eintrag ins Stichwortverzeichnis
Dim Seite(100) As Integer æ Seiten auf denen sich das Stichwort befindet
Dim StartSeite, EndeSeite æ Start und Ende des Suchbereichs
Dim i, Nr As Integer æ Zählvariablen
Eintrag = Selection.Text æ Stichwort einlesen
ActiveDocument.Bookmarks.Add Range:=Selection.Range, Name:=ötempö æ Mark. merken
Selection.GoTo What:=wdGoToBookmark, Name:=öStartseiteö æ zur Startseite gehen
StartSeite = Selection.Information(wdActiveEndPageNumber) æ Seitennummer einlesen
Selection.GoTo What:=wdGoToBookmark, Name:=öEndeseiteö æ zur Endeseite gehen
EndeSeite = Selection.Information(wdActiveEndPageNumber) æ Endeseite einlesen
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Name:=StartSeite
With Selection.Find æ Suchoptionen
.ClearFormatting æ Formatierungen nicht beachten
.Text = Eintrag æ Suchtext
.Replacement.Text = “ö æ nicht ersetzen
.Forward = True æ Suchrichtung
.MatchCase = True æ Groß- und Kleinschreibung beachten
End With
Do
Selection.Find.Execute
If Selection.Find.Found = False Then Exit Do æ Stichwort nicht mehr gefunden
Nr = Nr + 1
Seite(Nr) = Selection.Information(wdActiveEndPageNumber) æ Seitennummer speichern
Selection.GoTo What:=wdGoToPage, Which:=wdGoToNext, Count:=1, Name:=öö
Loop While Seite(Nr) < EndeSeite
If Seite(Nr) > EndeSeite Then æ Fehler kann auftreten, wenn Suchwort nicht auf EndeSeite
Seite(Nr) = 0 æ Seiteneintrag löschen
Nr = Nr - 1 æ Nummer korrigieren
End If
Seite(0) = -1 æ erste Seite immer anzeigen
Eintrag = Eintrag & “ “
For i = 1 To Nr
If Seite(i) - Seite(i - 1) > 1 Then æ Abstand zweier Seiten größer als 1?
Eintrag = Eintrag & Seite(i) æ Seitennummer hinzufügen
ElseIf (Right(Eintrag, 2) <> “ffö) Then æ “ffö für aufeinanderfolgende Seiten
Eintrag = Eintrag & “fö æ “fö für aufeinanderfolgende Seiten hinzufügen
End If
If Seite(i + 1) - Seite(i) > 1 Then Eintrag = Eintrag & “, “ æ neue Seitennummer trennen
Next i
If Right(Eintrag, 2) = “, “ Then Eintrag = Left(Eintrag, Len(Eintrag) - 2) æ letzes “, “ weg
Selection.GoTo What:=wdGoToBookmark, Name:=öStichwortverzeichnisö
Selection.TypeParagraph æ Zeilenvorschub
Selection.TypeText Text:=Eintrag æ Eintrag ins Stichwortverzeichnis schreiben
Selection.GoTo What:=wdGoToBookmark, Name:=ötempö æ zum markierten Text zurück
ActiveDocument.Bookmarks(“tempö).Delete æ Markierung löschen
End Sub