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

  • Einen solchen Check gibt es für Excel.
    Ob das auch für Word funktioniert, müsstest Du testen.

  • Vielen Dank für den Hinweis. Ich habe das getestet, doch es hat nicht funktioniert, da nicht die Datei selbst, sondern der VB-Inhalt mit einem Kennwort geschützt wurde.


    Code
        ; Open the Document
        Local $oDoc = _Word_DocOpen($oWord, $sTemplate)
        If @error Then
           If @extended = -2147352567 Then
              ConsoleWrite(" Schreibgeschützt!" & @CRLF)
             _Word_DocClose($oDoc)
           EndIf
        EndIf


    Das ist die Consolenausgabe bei dem Fehler:

    Code
    "D:\Documents\VBA\Vorlagen\Vorlagenscript_5.au3" (63) : ==> The requested action with this object has failed.:
    For $oVBComponent In $oVBProject.VBComponents
    For $oVBComponent In $oVBProject^ ERROR
    ->20:46:04 AutoIt3.exe ended.rc:1
    +>20:46:04 AutoIt3Wrapper Finished.
    >Exit code: 1    Time: 653.8

    Das hat auch nicht funktioniert:


    Code
        ; Open the Document
        Local $oDoc = _Word_DocOpen($oWord, $sTemplate)
            If @error Then _Word_DocClose($oDoc)

    Was könnte ich noch versuchen, damit ein kennwortgeschütztes Dokument einfach nach dem öffnen wieder schließt und es anschließend mit der Stapelverarbeitung weitergeht?

  • Dann braucht es einen COM error handler. Damit wird der Fehler abgefangen und das Skript crashed nicht mehr. Der Fehlercode kann dann im Skript abgefragt werden und die Funktion _VBAModify mit Return beenet werden.

  • Dann braucht es einen COM error handler. Damit wird der Fehler abgefangen und das Skript crashed nicht mehr. Der Fehlercode kann dann im Skript abgefragt werden und die Funktion _VBAModify mit Return beenet werden.


    Herzlichen Dank für die kompetente und freundliche Hilfe.

    Das ist für mich ein mächtig kompliziertes Konstrukt. Das hätte ich niemals alleine geschafft.

    Ich teste das ganze am Wochenende in Ruhe und hoffe, dass ich Dich mit meinen immerzu "letzten" Fragen nicht mehr weiter belästige (wobei versprechen kann ich das nicht :-)).

  • Hallo water


    Die Fehler werden jetzt Dank Deines "COM error handler" abgefangen und das Skript crashed nicht mehr, sondern läuft nach Bestätigen der Debug-Info weiter bis zum Ende durch.


    Ich kann mit dem Skript sehr gut arbeiten und sogar die wenigen geschützten von den ungeschützen Dokumenten aufgrund der Consolenausgabe des Errorhandlings prima separieren.

    Zusätzlich werde ich noch den Vorschlag von BugFix aufnehmen und möchte die eh schon vorhandene .txt-Datei (quasi die Datenbank welche alle ca. 400 Benutzer beinhaltet) so aufbereiten, dass die zu suchenden Strings bei zukünftigen Namensänderungen aus der .txt-Datei ausgelesen werden können.


    Anbei noch beide Debug Info-Meldungen welche (vom COM error handler) jeweils bei den kennwortgeschützten MS-Word-Vorlagen abgefangen wurden:



    Hier das gesamte Skript (mit Stapelverarbeitung). Wenn es noch jemmand nutzen möchte.


  • Vor Zeile 68 könntest Du noch die Fehlerprüfung einbauen. Damit wird die Verarbeitung für die aktuelle Component beendet und die nächste verarbeitet.

    Code
    If @error Then ContinueLoop