Schreibbüro Richter

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.