Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)

  • Hallo zusammen,


    wir nutzen in unserer Firma Dokumentvorlagen in Word mit Macros und VBA-Progammierung. Soweit so gut.

    In allen Dokumentvorlagen die mit VBA programmiert wurden, sind diverse Namen von Chefs oder Organisationseinheiten enthalten, welche dann entsprechend nach einer Abfrage beim Anwender, zur Signatur in das Dokument eingefügt werden.


    Jetzt ändern sich nun mal ab und an ein Name eines Chefs oder Organisationseinheiten und die Vorlagen müssen mit "Alt+F11" im Visual-Basic-Editor geöffnet die gesuchte Stelle gefunden und editiert werden. Das macht bei ca. 80 Dokumentvorlagen mit vielen Anwenderabfragen keinen Spass.

    Also ganz wichtig: Das Problem besteht nicht im suchen und ersetzen von Inhalten einer Textpassage im Dokument sondern im suchen und ersetzen von Texten in der von der Office-Vorlage verwendeten Texte der VBA-Dialogboxen und im VBA Code.

    Daher meine Frage:

    Kennt jemand von Euch ein Tool oder eine Möglichkeit, Textinhalte automatisch (ohne das jedesmal manuell im Visual-Basic-Editor machen zu müssen) zu suchen und zu ersetzen und das am besten noch in Stapelverarbeitung.


    Ich hoffe ich konnte mich gut genug ausdrücken damit ihr versteht wobei ich Hilfe benötige. Ich bin im formulieren nicht der Beste.


    Freue mich über jeden Rat.

  • Zum Suchen & Ersetzen kann ich im Moment nichts sagen.

    Aber ein Tipp: Verwende für sich evtl. ändernde Daten Variablen, die du z. B. aus einer INI oder Datenbank liest. Geht mit VBA ebenso einfach, wie in AutoIt.

    Da hast Du 100%ig Recht. Die Word-Vorlagen wurden damals von extern erstellt. Den Aufwand zu betreiben, die teilweise sehr aufwendigen Vorlagen neu aufzusetzen kann ich derzeit nicht leisten. Daher hoffe ich auf einen guten Rat.

  • Das sollte mit dem VBProject Objekt des Word Dokumentes möglich sein.
    Da müsste man zwar etwas forschen, habe das selbst noch nie gemacht.


    Beispiel (zwar für Excel, das ist aber egal, VBA ist VBA):

    Einstieg in das Literaturstudium:

  • Moin bazii

    In Word (VBA) kann man mehrere Wörter in einem Word-Dokument ersetzt.
    Die gefundenen Stellen werden dabei mit der Hintergrundfarbe Rot formatiert. Kannst Du wieder raus nehmen, wenn nicht gewünscht.

    Beipsiel 2:
    Mehrere Suchbegriffe in einem Word-Dokument durch andere ersetzen.

    Vielleicht hilft es Dir etwas weiter.

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Schau mal, ob es das ist, was Du suchst:


    Ich lasse noch zusätzlich ein paar andere Werte anzeigen, wenn Du das nicht brauchst, dann einfach entfernen

  • Um sicherzugehen, dass wir alle dasselbe Verständnis des Problems/der Anforderung haben (siehe Post #1), fasse ich meine Sicht kurz zusammen.

    • Wenn Vorlagen aufgerufen werden, dann wird auch VBA Code aus dieser Vorlage ausgeführt.
    • DIe Aufgabe besteht nun darin, Teile dieses VBA Codes zu ersetzen (Name von Vorgesetzten, Orgeinheiten etc.)
    • Es geht also nicht darum, Text im Word Dokument zu ersetzen und auch nicht um die Anpassung von Dokument-Eigenschaften

    bazii:

    • Ist meine Sichtweise korrekt?
    • Ein Beispieldokument als Spielwiese wäre natürlich hilfreich
  • Hallo zusammen,


    vielen Dank für die vielen Hinweise und für die Ansätze.


    @water: Deine Sichtweise ist zu 100 % korrekt. DIe Aufgabe besteht darin, Teile des VBA Codes (am besten in Stapelverarbeitung) zu ersetzen (Name von Vorgesetzten, Orgeinheiten usw.) welche aus dieser(n) Vorlage(n) ausgeführt werden. Ich kann morgen versuchen, eine modifizierte Beispiel-Vorlagendatei als Spielwiese zu verlinken. Ich darf nur nicht vergessen, wirklich alles zu finden, was anonymisiert werden muss. Vielen Dank auch für die Hilfe in Beitrag Nr. 4. Am Wochenende kann ich versuchen, mich in die Links einzulesen.

    Edit: Ich denke dass die von Dir zitierten Links dem Nagel auf den Kopf treffen und mir helfen werden eine gute Lösung zu finden.


    @Alina: Deine Ansätze verfolgen die Textsuche und die Textersetzung im Dokument. Das ist nicht das was ich brauche aber dennoch vielen Dank dafür.


    @BananaJoe: Ich muss Dein Beispiel testen ob es für mich ausbaufähig ist. Vielen Dank dafür.

    Viele Grüße
    -Bazii-

    2 Mal editiert, zuletzt von bazii () aus folgendem Grund: Edit: Ich denke dass ...

  • Den Aufwand zu betreiben, die teilweise sehr aufwendigen Vorlagen neu aufzusetzen kann ich derzeit nicht leisten.

    Aber wo ist der Unterschied, ob du per Suchen & Ersetzen einfügst:

    Suche "Meier" Ersetze "Müller"

    oder

    Suche "Meier" Ersetze "INIRead(Inipfad, Chef)" - mit entsprechender VBA Umsetzung

    Danach hast du alle Vorlagen dynamisch aktualisiert.

  • Meinem Verständnis nach befinden sich die zu ändernden Informationen nicht im Inhalt des Dokumentes das ich im Objekt Modell als Range ansprechen kann, sondern im VBProject Objekt.
    Daher ist es für die "normale" Word find & replace nicht erreichbar.
    VBProject ist ein die Office Produkte überspannendes Objekt, daher wird in der Word Objekt Referenz auch nicht darauf eingegangen. Es wird in einer eigenen Objekt Referenz abgehandelt (siehe oben).

    Mit einem Beispieldokument können wir dann meine Theorie überprüfen :)

  • Alina: Deine Ansätze verfolgen die Textsuche und die Textersetzung im Dokument. Das ist nicht das was ich brauche aber dennoch vielen Dank dafür.

    Sorry, das habe ich dann falsch verstanden.

    ...... Lieben Gruß, ........
    ...........
    Alina ............

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Ich habe die Deutsche Hilfe auf meinem PC und
    OrganizeIncludes ist beim Scripten mein bester
    Freund. Okay?

  • Daher ist es für die "normale" Word find & replace nicht erreichbar.

    Das ist schon klar. Mit "Suchen & Ersetzen" meinte ich schon eine auf das VBA Objekt bezogene, zu implementierende Funktion, die das übernimmt.


    Ich wollte nur klarmachen:

    Wenn ich sowieso ersetze, dann doch lieber mit Variablen statt Fixwerten.

  • Hallo zusammen,


    anbei eine Beispieldatei die recht unkompliziert (im Gegensatz der Masse von dem was ich zu bearbeiten habe) ist aber hoffentlich deutlich macht, was ich meine.

    Ich konnte die Datei ins Forum als *.zip hochladen. Ich hoffe das ist ok.


    Ich wollte nur klarmachen:

    Wenn ich sowieso ersetze, dann doch lieber mit Variablen statt Fixwerten.

    Das stimmt in der Tat auch genau so. Da per VBA eh eine *.txt Datei angesteuert wird, um wenige Sachbearbeiter-Informationen automatisiert in den Inhalt zu übernehmen, kann diese auch wie BugFix schrieb mit wenig Aufwand geändert werden, wenn eine Stapelverarbeitung an der richtigen Stelle eingesetzt werden kann.


    Edit bazii am 08.09.2022, 20.17 Uhr: Den Dateianhang habe ich aufgrund der enthaltenen Macros sicherheitshalber wieder entfernt. Wenn der Dateianhang für experimentielle Zwecke benötigt werden sollte bitte ich um eine PN.

    Viele Grüße
    -Bazii-

    Einmal editiert, zuletzt von bazii () aus folgendem Grund: Dateianhang aus Sicherheitsgründen entfernt.

  • Beispielskript. Jetzt musst Du nur noch die - aus Deiner Sicht - notwendigen Änderungen einfügen.

    • Listet die Projekte mit Name und Typ
    • Listet die Komponenten von Projekt "TemplateProject" mit Name und Typ
    • Öffnet das "AutoNew" Macro
    • Schreibt den Inhalt des "AutoNew" Macros Zeile für Zeile auf die Konsole
    • Ändert das "AutoNew" Macro (ersetzen, löschen, einfügen von Zeilen)
    • Schreibt den Inhalt des "AutoNew" Macros inkl. aller Änderungen als einen einzigen String auf die Konsole
  • Hallo water


    Die Umsetzung ist einfach klasse.


    Herzlichen Dank für die kompetente Hilfe und für die Bereitstellung des Scriptes jedoch vor allem für die viele Zeit, die Du investiert hast um zu helfen.

    Ich hoffe sehr dass es noch weitere Leute da draußen gibt, die davon noch provitieren können.


    @BugFix und allen Beteiligten natürlich auch ein herzliches Danke für die vielen Denkanstöße und Hilfen.

  • bazii

    Hat den Titel des Themas von „Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung“ zu „Microsoft Word: Suche und ersetze Text in den Inhalten der VBA-Progammierung (gelöst)“ geändert.
  • Beispielscript für das konkrete Problem.

    • Es müssen nur mehr die markierten Variablen eingesetzt werden
    • Die Originaldateien werden nicht überschrieben
    • Im Ursprungsverzeichnis wird die geänderte Datei als Dateiname-NEW.dotm gespeichert
    • Für die Stapelverarbeitung muss nun nur noch mit _FileListToArray ein Array der zu verarbeitenden Dateien erstellt und für jede Datei dann die Funktion mit dem Dateinamen als Parameter aufgerufen werden


  • Hallo water,


    vielen Dank für das Script.


    Das Script öffnet bei mir die Word-Datei doch dann bricht es ab.


    Hier meine Konsolenausgabe:

    Meine Änderungen im anpassbaren Skriptbereich waren:



    Code
    ; ********** Änderungen nur NACH dieser Zeile **********
    Global $sSearch = "Sachgebietsleiter"                     ; Wonach soll gesucht werden?
    Global $sReplace = "Sachgebietsleitung"                   ; Wodurch soll es ersetzt werden?
    Global $sTemplate = @ScriptDir & "\I-Brief"  ; Zu verarbeitende Word Vorlagedatei
    ; ********** Änderungen nur VOR dieser Zeile **********

    Kann mir die Officeversion (Word 2016) oder die neue Autoitversion einen Streich spielen?

  • In MS Word: Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen für Entwickler > Zugriff auf das VBA-Projektmodell vertrauen > aktivieren

  • In MS Word: Datei > Optionen > Trust Center > Einstellungen für das Trust Center > Makroeinstellungen für Entwickler > Zugriff auf das VBA-Projektmodell vertrauen > aktivieren


    Das hat geklappt. Vielen Dank. Dazu habe ich noch alle Macros erlaubt.


    Die Vorlagen-Datei wird nun ordnungsgemäß geöffnet und eine neue Datei wird erstellt. Die Konsole bringt keine Fehler mehr. >Exit code: 0 Time: 6.602 Allerdings wurde der gewünschte Text in der neuen Datei nicht ersetzt. Ich habe das ganze Trust-Center durchgeschaut aber nichts mehr gefunden, was das Textersetzen verhindern könnte.


    Hast Du noch einen Tip für mich?

  • Bei mir hat es funktioniert.

    Poste mal Dein Skript.