Automatische Nummerierung mit Einbeziehung der aktuellen Kapitelnummer in Word mit den Feldfunktionen StyleRef und Seq
In langen Dokumenten mit automatischer Gliederung möchte man gern innerhalb eines Kapitels eine weitere automatische Nummerierung erstellen, die die Kapitelnummer einbezieht. Dafür kann man allerdings keine eigene Gliederungsebene von Word verwenden. Einmal ist deren Anzahl auf 9 begrenzt. Zum anderen soll die Nummerierung unabhängig von der Gliederungsebene funktionieren, also jeweils im aktuellen Kapitel eine Unternummerierung darstellen. Und schließlich soll diese Nummerierung natürlich auch nicht ins automatische Inhaltsverzeichnis aufgenommen werden. Aus diesen Gründen scheidet eine eigene Gliederungsebene aus.
StyleRef-Feld und Seq-Feld zur automatischen Absatznummerierung in Word
In der Oberfläche von Word lässt sich dafür ein StyleRef-Feld mit anschließendem Seq-Feld verwenden. Feldcode für das Beispiel:
{ STYLEREF "Überschrift 4" \n \* MERGEFORMAT }.{ SEQ a\* Arabic\n \* MERGEFORMAT }
Den Feldcode kann man einmal erstellen und dann jeweils vor den betreffenden Absätzen einfügen, dann die Felder aktualisieren lassen.
StyleRef-Feld und Seq-Feld mit VBA ermitteln und einfügen
Um sich das Hangeln durch die Menüs zum Einfügen der Feldfunktionen zu ersparen und trotzdem jeweils auf die aktuelle Überschrift (also die letzte vorhandene) zu verweisen, kann man mit VBA die letzte Überschrift ermitteln und beide Felder mit dem Makro RefNummerierungKapitel einfügen lassen.
Damit die Prozeduren auch unter Word 97 laufen, werden die Feldfunktionen versionsabhängig bestückt (in Word 97 waren die Feldnamen noch ins Deutsche übersetzt).
Sub RefNummerierungKapitel()
' fügt eine Nummerierung (Seq-Feld) im "aktuellen" Kapitel ein
' (das auf die "aktuelle" Überschrift verweist)
' © Schreibbüro Richter 2008
Dim rng As Word.Range
Dim myFeld As Word.Field
Dim strEbene As String
Dim strNummer As String
Dim strStyleref As String
Dim strArabic As String
Set rng = Selection.Paragraphs(1).Range
Do
rng.Collapse wdCollapseStart
rng.MoveStart Unit:=wdParagraph, Count:=-1
Loop Until InStr(1, rng.Paragraphs(1).Style, "Überschrift", vbTextCompare) > 0
If Val(Application.Version) < 9 Then 'In Word 97 sind die Feldfunktionen deutsch
strStyleref = "FVREF"
strArabic = "Arabisch"
Else
strStyleref = "STYLEREF"
strArabic = "Arabic"
End If
strEbene = rng.Paragraphs(1).Style
strEbene = strStyleref & " " & Chr(34) & strEbene & Chr(34) & " \n "
Selection.Font.Reset
Set myFeld = Selection.Fields.Add(Range:=Selection.Range, _
Type:=wdFieldEmpty, _
Text:=strEbene)
strNummer = myFeld.Result
If Right$(strNummer, 1) <> "." Then 'falls die Nr. nicht mit Punkt endet
Selection.Collapse wdCollapseEnd
Selection.TypeText "."
End If
Set myFeld = Selection.Fields.Add(Range:=Selection.Range, _
Type:=wdFieldEmpty, _
Text:="SEQ a\* " & strArabic & "\n ")
myFeld.Update
Selection.TypeText "." 'abschließender Punkt
Set myFeld = Nothing
Set rng = Nothing
End Sub
Nummerierung mit Makro neu starten
Um die Zählung des Seq-Feldes an bestimmten Stellen gezielt wieder mit 1 (oder einer anderen Startnummer) beginnen zu lassen, gibt es die kleine Prozedur StartnummerNeuSetzen.
Sub StartnummerNeuSetzen()
' setzt die Startnummer eines solchen Seq-Feldes neu
' (z. B. falls zuvor eine Überschrift eingefügt wurde)
Dim rng As Word.Range
Dim strCode As String
Dim intPos As Integer
Dim intAnzahl As Integer
Set rng = Selection.Range
If rng.Fields.Count < 1 Then
MsgBox "Es ist kein Feld markiert."
Exit Sub
End If
strCode = rng.Fields(1).Code.Text
intPos = InStr(1, strCode, "\n", vbBinaryCompare)
If intPos > 0 Then
intAnzahl = Len(strCode)
strCode = Mid$(strCode, 1, intPos) & "r1" & _
Mid$(strCode, intPos + 2, intAnzahl - intPos + 2)
rng.Fields(1).Code.Text = strCode
ActiveDocument.Fields.Update
End If
Set rng = Nothing
End Sub
So ordnen Sie den Prozeduren eine Schaltfläche in der Menüleiste oder einen Shortcut zu: → Makro mit Shortcut verwenden oder in der Menüleiste unterbringen.