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. |
Für weitere Infos bitte auf den Text klicken
Cookies speichern Informationen lokal auf Ihrem Rechner, ohne die Verwendung kann der Funktionsumfang beeinträchtigt werden. Weitere Informationen
Annehmen