Dokumentübergreifendes Suchen & Ersetzen (bis Word 2003)

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, 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
Sub Vorlagen_Wort_ersetzen() 

   Dim anzdatei As Integer 
   Dim pfad As String 
   Dim Schutz As Boolean 
   Dim i As Long 
   Dim a As Long 
   Dim fs As FileSearch 
    
    
   Schutz = False 
   Set fs = Application.FileSearch 
    
   pfad = InputBox("Geben Sie den Pfad an", "Pfad") 
    
   With fs 
      .NewSearch 
      .FileType = msoFileTypeTemplates 
      .LookIn = pfad 
      If .Execute = 0 Then 
         MsgBox "Es wurden keine Dateien gefunden." 
         Exit Sub 
      Else 
         anzdatei = .FoundFiles.Count 
      End If 
   End With 
    
   For i = 1 To anzdatei 
       WordBasic.DisableAutoMacros 1 
       Documents.Open fs.FoundFiles(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 diesem Code wird das Filesearch-Objekt benutzt, um alle Vorlagen eines Ordners zu lesen. 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