Dokumentübergreifendes Suchen & Ersetzen
(Word 2007)

Es verändert sich ja immer einmal etwas. Also kommt es, wie es nicht kommen sollte: Es gibt eine generelle Änderung und nun müssen alle Dokumente oder Vorlagen eines Ordners geändert werden. Eine Lösung ist natürlich, alle Vorlagen zu öffnen, die Änderung vorzunehmen, die Vorlage zu speichern und wieder zu schließen. Das kann bei vielen Vorlagen Einiges an Arbeit verursachen.

Es geht aber auch mit VBA. Hier ein Beispiel für Word 2007, wie man ein Wort in den Vorlagen eines Ordners - welcher abgefragt wird - ändern kann: 

               
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
Sub Vorlagen_Wort_ersetzen_Word2007() 

   Dim anzdatei As Integer 
   Dim Pfad As String 
   Dim Datei As String 
   Dim Schutz As Boolean 
   Dim i As Long 
   Dim a As Long 
   Dim fs As New Collection 
     
     
   Schutz = False 
    
   Pfad = InputBox("Geben Sie den Pfad an", "Pfad") 
     
   If Right(Pfad, 1) <> "\" Then Pfad = Pfad & "\" 
     
   Datei = Dir(Pfad, vbDirectory
   If Datei = "" Then 
       MsgBox "kein Ordner oder Dateien!" 
       Exit Sub 
   End If 
    
   Do While Datei <> "" 
       If Datei <> "." And Datei <> ".." Then 
           If (GetAttr(Pfad & Datei) And vbDirectory) <> vbDirectory Then 
               If Right(Datei, 4) = "dotm" Or Right(Datei, 4) = "dotx" Then 
                   fs.Add Pfad & Datei 
               End If 
           End If 
       End If 
       Datei = Dir 
   Loop 
     
   anzdatei = fs.Count 
        
   For i = 1 To anzdatei 
       WordBasic.DisableAutoMacros 1 
       Documents.Open fs(i) 
         
         
       If ActiveDocument.ProtectionType <> wdNoProtection Then 
           Schutz = True 
             'Array für den Dokumentenschutz der Abschnitte
           ReDim strArray(ActiveDocument.Sections.Count) 
             
             'Array einlesen
           For a = 1 To ActiveDocument.Sections.Count 
               If ActiveDocument.Sections(a).ProtectedForForms = True Then 
                   strArray(a) = 1 
               Else 
                   strArray(a) = 0 
               End If 
           Next 
             'Dokumentenschutz aufheben
           ActiveDocument.Unprotect 
       End If 
         
         
         'hier wird Test in den Dokumenten gesucht und geändert
       Dim MyStoryRange As Word.Range 
       For Each MyStoryRange In ActiveDocument.StoryRanges 
         With MyStoryRange.Find 
            .ClearFormatting 
            .Text = "Ursprungstext" 
         
            With .Replacement 
              .ClearFormatting 
              .Text = "neuer Text" 
            End With 
         
            .Execute Replace:=wdReplaceAll, _ 
            Format:=True, MatchCase:=True, _ 
            MatchWholeWord:=True 
         
         End With 
         
       Next MyStoryRange 
         
       If Schutz = True Then 
           For a = 1 To ActiveDocument.Sections.Count 
               If strArray(a) = 1 Then 
                   ActiveDocument.Sections(a).ProtectedForForms = True 
               Else 
                   ActiveDocument.Sections(a).ProtectedForForms = False 
               End If 
           Next 
             'Dokumentenschutz wieder einschalten
           ActiveDocument.Protect Password:="", NoReset:=True, Type:=wdAllowOnlyFormFields 
       End If 
         
         'Dokument wird gespeichert und geschlossen
       ActiveDocument.Save 
       ActiveDocument.Close 
       WordBasic.DisableAutoMacros 0 
         
   Next i 
     
   MsgBox "Es wurden " & anzdatei & " Datei(en) neu gespeichert!" 


End Sub 


 

In Word 2007 ist das Filesearch-Objekt nicht mehr verfügbar. Daher werden die Dateien über eine Collection mit der Funktion Dir eingelesen. Im Code werden alle Vorlagen eines Ordners eingelesen. Sollten keine Dateien vorhanden sein, gibt es eine entsprechende Meldung.

Sonst werden ab Zeile 28 alle gefundenen Vorlagen durchlaufen. Zunächst werden automatische Makros, die in den Vorlagen vorhanden sein könnten, ausgeschaltet. Dazu muss ein alter WordBasic-Befehl herhalten. Eine Entsprechung in den aktuellen Versionen von VBA gibt es leider nicht.

Hier gibt es noch eine Besonderheit: Sollten in den Vorlagen geschützte Abschnitte vorhanden sein, so werden diese ermittelt und der Dokumentenschutz aufgehoben. Nach der Änderung werden die Abschnitte wieder geschützt. Passwörter dürfen hier nicht gesetzt sein, da sonst der Code entsprechend ergänzt werden müsste.

Als Beispiel wird nach "Ursprungstext" gesucht und durch "neuer Text" ersetzt. Es können natürlich alle Varianten - wie bei der allgemeinen Suche - benutzt werden.

Nach der Änderung wird die Vorlage gespeichert und geschlossen.

 

   

Achtung:
Bei einer großen Anzahl von Vorlagen kann der Vorgang einige Zeit in Anspruch nehmen. Am besten erst einmal an Sicherheitskopien testen. Und nicht vergessen - immer vorher Sicherheitskopien der Ursprungsdateien erstellen. Falls mal etwas schief geht. 

 





zurück zur Übersicht Suchen - Ersetzen
Diese Seite zu Mister Wong hinzufügen
Diese Seite zu ecure.del.icio.us hinzufügen
Diese Seite zu webnews hinzufügen
Diese Seite zu Google Bookmarks hinzufügen
Diese Seite zu linkarena hinzufügen
Diese Seite zu Yahoo hinzufügen










Für weitere Infos bitte auf den Text klicken

http://www.prawi-officewelt.de
 .::. nach oben .::.
 
 
©2008 - 2024 www.VBA-Wordwelt.de - alle Rechte vorbehalten
 
Kontakt | Impressum
los Suche

Cookies speichern Informationen lokal auf Ihrem Rechner, ohne die Verwendung kann der Funktionsumfang beeinträchtigt werden. Weitere Informationen


Annehmen