Automatisch nummerierte Listen und Gliederungen in Word in normalen Text umwandeln
Seit Word 97 sind die automatischen Nummerierungen und Gliederungen in Word für Benutzer über das Menü sichtbar und finden seither verbreitet Verwendung. Die Bedienung scheint zwar einfach. Arbeiten jedoch mehrere Benutzer an einem Worddokument, zeigt sich, dass die automatische Nummerierung auch einige Nachteile hat. Nicht wenige Benutzer haben regelrecht den Eindruck, gegen die automatischen Listen anzukämpfen, und verwenden sie deswegen gar nicht mehr. Große Arbeitserleichterungen erreicht man erst, nachdem man die Logik der Benutzung richtig verstanden hat.
Alle automatischen Gliederungen, nummerierten Listen und Aufzählungszeichen in Text umwandeln
Um nun Dokumente von den Gliederungen und Listen zu bereinigen, kann man natürlich zum »Rundumschlag« ausholen und mit der folgenden kleinen Prozedur alle Gliederungen, nummerierten Listen und Aufzählungszeichen im Dokument durch Text ersetzen lassen:
Sub NummerierteListenAufloesen()
' alle Listen im Dokument werden aufgelöst, auch Aufzählungszeichen
' die Formatvorlagen werden allerdings nicht geändert!
Dim lst As Word.List
For Each lst In ActiveDocument.Lists
lst.ConvertNumbersToText
Next lst
End Sub
Automatische Gliederungen und nummerierte Listen in Text umwandeln
Das geht manchem zu weit, der gern die Aufzählungszeichen erhalten würde. Hat man die Aufzählungszeichen beispielsweise mit einer Formatvorlage verknüpft, lässt sich damit sehr gut arbeiten. Zudem ändert die obige Prozedur die mit den Listen verknüpften Formatvorlagen nicht, so dass bei einer Aktualisierung des Dokuments die Nummern ggf. doppelt erschienen. Um nur die automatischen Gliederungen und die nummerierten Listen eines Dokuments zu ersetzen, findet daher die folgende Prozedur Anwendung. Sie löst auch eventuell bestehende Verknüpfungen der Listen zu Formatvorlagen (z. B. der Gliederung zu den Überschriften-Formatvorlagen). Die verwendete Funktion fkt_InArray stammt von Christian Freßdorf.
Sub NummerierungenEntfernen()
' © Schreibbüro Richter 2008
' wandelt Gliederung und Nummerierungen in normalen Text um,
' Formatvorlagen bleiben erhalten,
' die Gliederung wird aus den Formatvorlagen entfernt
' die Aufzählungszeichen bleiben erhalten
' entspricht etwa einem Unlink der Nummerierungen
Dim i As Long, j As Long
Dim para As Word.Paragraph
Dim styArr() As String
Dim listArr() As List
i = 1
ReDim styArr(0)
ReDim listArr(0)
If ActiveDocument.Lists.Count < 1 Then
MsgBox "Das Dokument enthält keine nummerierten Listen."
Exit Sub
End If
For j = 1 To ActiveDocument.Lists.Count 'um die Liste zu identifizieren
For Each para In ActiveDocument.Lists(j).ListParagraphs 'durch alle Absätze einer Liste schleifen
Select Case para.Range.ListFormat.ListType
Case Is = wdListOutlineNumbering '=Mit Zahlen
If Val(Application.Version) >= 10 Then 'ab Word 2002 gibt es Tabellenvorlagen!
If para.Range.Information(wdWithInTable) Then 'Listen in Tabellen werden gleich insgesamt
para.Range.Tables(1).Range.ListFormat.ConvertNumbersToText 'gewandelt, weil nicht über
Exit For 'Style fassbar
End >If
End If
If fkt_InArray(para.Style, styArr()) = False Then 'falls noch nicht "eingesammelt"
ReDim Preserve styArr(i) 'Preserve vergrößert das Array,
'bereits enthaltene Daten bleiben erhalten
styArr(i) = para.Style 'Formatvorlage wird ins Array gefüllt
i = i + 1
End If
ReDim Preserve listArr(j)
Set listArr(j) = ActiveDocument.Lists(j) 'Liste wird ins Array gefüllt
Exit For
Case Is = wdListSimpleNumbering
ReDim Preserve listArr(j)
Set listArr(j) = ActiveDocument.Lists(j) 'Liste wird ins Array gefüllt
Exit For
Case Else
Exit For
End Select
Next para
Next j
On Error Resume Next 'ist für "verwaiste Listen" vor Word 2002
For j = 1 To UBound(listArr) 'durch Listen-Array schleifen
listArr(j).ConvertNumbersToText 'Liste wird durch Zahlen "ersetzt"
Next j
On Error GoTo 0
For i = 1 To UBound(styArr) 'durchs Style-Array schleifen
ActiveDocument.Styles(styArr(i)).LinkToListTemplate Nothing 'Style wird von List gelöst
Next i
End Sub
Function fkt_InArray(ByVal sStyle As String, ByRef sArray() As String) As Boolean
' wird true, wenn die Formatvorlage bereits im Array enthalten ist
' Diese Funktion stammt von Christian Freßdorf
Dim i As Integer
fkt_InArray = False
For i = 0 To UBound(sArray)
If sArray(i) = sStyle Then
fkt_InArray = True
Exit For
End If
Next i
End Function
So ordnen Sie dem Makro eine Schaltfläche auf einer Symbolleiste oder einen Shortcut zu: VBA-Code für Makro einbringen und verwenden.