Word-Makro: Textformatierung überprüfen

happyeater

Grünschnabel
Liebe *,

ich möchte einen Bereich in einem Word-Dokument daraufhin überprüfen, ob bestimmte (bei der Weiterverarbeitung unerlaubte) Textformatierungen vorliegen (z.B. doppelt durchgestrichen oder fett&unterstrichen).
Dazu fallen mir zwei Lösungsmöglichkeiten ein:
1. Im Text "blind" nach den Formatierungen suchen
2. Den Text Wort für Wort durchgehen und jedes Wort auf die Textformatierung hin überprüfen.

Leider bin ich kein Experte in VB, daher weiß ich nicht, ob Möglichkeit 1 überhaupt geht. Ich habe mich jedenfalls für Möglichkeit 2 entschieden und löse das so, wie im untenstehenden Code gezeigt.
Problem: Das ist saulangsam. Wenn der Text bloß eine Din-A4-Seite lang ist, kann man während der Überprüfung schon fast einkaufen gehen. Daher die Frage: Hat jemand einen Vorschlag, wie das auch schneller geht?

Vielen Dank!
happyeater

Code:
    For i = 1 To (ActiveDocument.Tables(2).Rows.Count - 2)
        zelle = ActiveDocument.Tables(2).Cell(i, 2)
        zelle.Select
        intWoerter = Selection.Words.Count - 1

            For j = 1 To intWoerter
                If ((Selection.Words(j).Font.Underline And Selection.Words(j).Font.Bold) _
                Or (Selection.Words(j).Font.DoubleStrikeThrough) _
                Or (Selection.Words(j).Font.Animation) _
                Or (Selection.Words(j).Font.Emboss) _
                Or (Selection.Words(j).Font.Engrave) _
                Or (Selection.Words(j).Font.Outline) _
                Or (Selection.Words(j).Font.Shadow) _
                Or (Selection.Words(j).Font.StrikeThrough And Selection.Words(j).Font.Bold) _
                Or (Selection.Words(j).Font.StrikeThrough And Selection.Words(j).Font.Underline) _
                Or (Selection.Words(j).Font.StrikeThrough And Selection.Words(j).Font.Italic) _
                Or (Selection.Words(j).Font.SmallCaps And Selection.Words(j).Font.Bold) _
                Or (Selection.Words(j).Font.SmallCaps And Selection.Words(j).Font.StrikeThrough) _
                Or (Selection.Words(j).Font.SmallCaps And Selection.Words(j).Font.Underline) _
                Or (Selection.Words(j).Font.SmallCaps And Selection.Words(j).Font.Italic) _
                Or (Selection.Words(j).Font.SmallCaps And Selection.Words(j).Font.Superscript) _
                Or (Selection.Words(j).Font.Underline And Selection.Words(j).Font.Superscript) _
                Or (Selection.Words(j).Font.Underline And Selection.Words(j).Font.Subscript) _
                Or (Selection.Words(j).Font.Bold And Selection.Words(j).Font.Superscript) _
                Or (Selection.Words(j).Font.Bold And Selection.Words(j).Font.Subscript) _
                Or (Selection.Words(j).Font.Italic And Selection.Words(j).Font.Superscript) _
                Or (Selection.Words(j).Font.Italic And Selection.Words(j).Font.Subscript)) _
                Then
                    MsgBox("Fehlermeldung")
                End If      ' Doppelformatierungen
            Next    ' jedes einzelne Wort pruefen
    Next    ' jede Tabellenzeile durchgehen
 
Du könntest doch den zu durchsuchenden Teil zwischen 2 Textmarken stecken, alles markieren und dann einfach die Formatierungen löschen/ändern:
Visual Basic:
Dim oDoc As Document
Set oDoc = ActiveDocument
oDoc.Range(Start:=oDoc.Bookmarks("Teil1").Range.Start, End:=oDoc.Bookmarks("Teil2").Range.Start).Select
'Ab hier kannst du dann mit Selection weiterarbeiten


Der Doc!
 
Hallo Doc,

danke für den schnellen Hinweis!
Ich möchte die Formatierung aber nicht einfach löschen: Die Überprüfung soll Projektmitarbeitern zeigen, wo sie an ihrem eigenen Text noch etwas ändern müssen. Sie sollen aber selbst entscheiden, WIE sie die Formatierung dann ändern, daher will ich sie nur auf die Stelle hinweisen, wo etwas nicht in Ordnung ist.

Gibt es (vgl. meine Möglichkeit 1, oben) einen Weg, in einer Selection oder in einem Paragraph (oder innerhalb einer Range) nach einer konkreten Textformatierung (und auch nach Kombinationen, also fett&unterstrichen) zu suchen?
So wie Selection.Find.Style, aber ohne eine definierte Word-Formatvorlage?
Vielleicht ginge das schneller ...

Viele Grüße
happyeater
 
Du kannst ja die Selection auf Eigenschaften von Font abfragen, würde so aussehen:
Visual Basic:
If Selection.FormattedText.Bold Then MsgBox "Text Fett!"
Welche Wörter jetzt genau betroffen ist kannst du zwar nicht abfragen, für einen Hinweis reicht die Abfrage aber allemal.


Der Doc!
 
Hallo Doc,

nochmal danke für den Hinweis; ich habe selbst noch etwas ausprobiert und bin jetzt bei einer ellenlangen Liste von Prüfungen der Form

Code:
            With Selection.Find
                .ClearFormatting
                .Font.Bold = True
                .Font.Underline = True
                .Execute FindText:="", Format:=True, Forward:=True
                If .Found = True Then
                    ' Fehlermeldung
                End If

... und das für jedes zu kontrollierende Format. Ist von der Schnelligkeit her ok und wird mir von der Funktionalität wohl ausreichen. Hoffe jetzt nur, dass das auch mit allen Word-Versionen läuft. Aber vielleicht fällt mir mit Deinem Hinweis noch eine bessere Methode ein.

Viele Grüße
happyeater
 
Zurück