Thema Datum  Von Nutzer Rating
Antwort
Rot WORD: Suchen und Ersetzen über VBA-Code
11.03.2019 15:34:17 Peter
NotSolved
11.03.2019 15:38:28 Peter
NotSolved

Ansicht des Beitrags:
Von:
Peter
Datum:
11.03.2019 15:34:17
Views:
32
Rating: Antwort:
  Ja
Thema:
WORD: Suchen und Ersetzen über VBA-Code

Hallo zusammen,

 

ich habe ein Frage und schaffe es scheinbar nicht, daraus eine gescheite Suchanfrage zu formulieren. Vielleicht kann mir jemand von Euch behilflich sein.

Aber von Vorne: 

Ich möchte in WORD (Office 365 unter Windows) lange Texte "bereinigen". Zum Beispiel sollen zwischen Abkürzungen ein schmales umbruchgeschütztes Leerzeichen stehen, zwischen Firmennamen und der Gesellschaftsform ein geschütztes Leerzeichen und so weiter und so fort. Insgesamt umfasst meine Liste gut 50 verschiedene Suchen-und-Ersetzen Ideen. Da sind einige reine Textanweisungen, andere sind mit Platzhaltern.

Ich habe mir dazu zugegebenerweise etwas uninspiriert ein Makro aufgezeichnet. Das sieht so aus:

 
    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = " AG"
        .Replacement.Text = "^sAG"
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = False
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll
 

Den Codeschnippsel habe ich dann mit veränderten Werten gut 50 × hintereinander in meinem Modul stehen. Soweit ist das auch erstmal gut und zielführend, das Programm macht genau das, was es soll. Die Dauer der Ausführung ist im Grunde nicht messbar. Ein Testdokument mit gut 10.000 Wörtern war in ca. 2 Sekunden abgearbeitet.

 

Da mir der Code aber wirklich zu hässlich und vor allem aber zu unübersichtlich ist, habe ich den ganzen Block in eine Function gepackt, die so aussieht:

Sub SuchenUndErsetzen(strText As String, strReplace As String, strWildCards As Boolean)

    Selection.Find.ClearFormatting
    Selection.Find.Replacement.ClearFormatting
    With Selection.Find
        .Text = strText
        .Replacement.Text = strReplace
        .Forward = True
        .Wrap = wdFindContinue
        .Format = False
        .MatchCase = True
        .MatchWholeWord = False
        .MatchWildcards = strWildCards
        .MatchSoundsLike = False
        .MatchAllWordForms = False
    End With
    Selection.Find.Execute Replace:=wdReplaceAll


End Sub

Diese rufe ich nun in einer eigenen Prozedur einfach 50 × hintereinander nach diesem Schema auf:

SuchenUndErsetzen "(<*[!(d|D)ie]) AG", "\1^sAG", True

Obwohl sich für mein bescheidenes Verständnis im Grunde nichts verändert hat, dauert die Ausführung dieser Variante bei gleichem Text weit über 3 Minuten.

 

Weiß jemand von Euch, an welcher Stelle ich kapitalen Bockmist veranstaltet habe? Obwohl mein Quick-and-Dirty Spaghetticode eigentlich klaglos läuft, hat mich doch die Neugierde gepackt. 

 

In Voraus ein ganz großes Danke für jede Mithilfe.

 

Herzliche Grüße aus dem Rheinland

 

 

Peter


Ihre Antwort
  • Bitte beschreiben Sie Ihr Problem möglichst genau und ausführlich
  • Codeschnipsel am besten über den Code-Button im Text-Editor einfügen
  • Die Angabe der Emailadresse ist freiwillig und wird nur verwendet, um Sie bei Antworten auf Ihren Beitrag zu benachrichtigen
  • Bitte markieren Sie Ihre Anfrage als erledigt wenn Ihnen geholfen wurde
Thema: Name: Email:

 
 

Thema Datum  Von Nutzer Rating
Antwort
Rot WORD: Suchen und Ersetzen über VBA-Code
11.03.2019 15:34:17 Peter
NotSolved
11.03.2019 15:38:28 Peter
NotSolved