Discussion:
Mit .vbs-Skript in Word-Dokument mehrere Begriffe suchen und erset
(zu alt für eine Antwort)
Johannes
2005-08-24 18:55:31 UTC
Permalink
Ich verstehe das Objektmodell von Microsoft Word 2003 einfach nicht mehr. Mit
einem .vbs-Skript möchte ich mehrere bestimmte Word-Dokumente öffnen, mehrere
Begriffe auf einmal suchen und ersetzen und sie dann als Kopie abspeichern.

Bis zum dritten Teil des Skriptes (Auslesen der Begriffe und der in Angriff
zu nehmenden Dokumente, sowie das Öffnen der Dokumente) läuft alles
planmässig. Doch weder kann ich den Dokumenteninhalt auslesen, noch Begriffe
ersetzen noch als Kopie ordentlich abspeichern.

Ich gebe meinen Geist auf. Die verschiedenen Klassen und ihre Elemente
schwirren wild im Kopf umher. Trotz unzähliger Versuche(GetObject etc) in die
verschiedensten Richtungen trete ich auf immer wieder auf derselben Stelle.
Alptraumhaft. KANN MIR EINER HELFEN? Herzlichen Dank Johannes


'Sub LeseDatei
'*************************************************************************************
' Beschreibung: Suchen und Ersetzen von mehreren Begriffen in mehreren
Dateien als .vbs-Skript
' Vorgang: 1. Einlesen der Begriffe in das Array aSuE
' 2.Einlesen der zu bearbeitenden Worddokumentnamen und - pfade in das
Array aDoc
' 3.Dokumente öffnen, Begriffe ersetzen, als Kopie speichern und schliessen
'**************************************************************************************


Dim fso, handleSuE, s, msgA, aSuE
Dim handleDocL, d
Dim Word, DocInhalt, Doc, i, ii, mMsg

Const DateiLesen = 1
Const wdAenderungenSpeichern = 1

Set Word = CreateObject("Word.Application")
Set Doc = CreateObject("Word.Document")
Set fso = CreateObject("Scripting.FileSystemObject")
Set handleSuE = fso.OpenTextFile("c:\SuE.txt", DateiLesen) 'Datei mit
Ausdrücken zum Suchen und Ersetzen öffnen
s = handleSuE.ReadAll 'Datei alles lesen
s = Replace(s,VbCrLf,"|") 'Absatzzeichen in Trennzeichen konvertieren
aSuE=Split(s,"|",-1,1) 'Array bilden, aSuE(gerade)=Suchen ,
aSuE(Ungerade)=Ersetzen
handleSuE.Close 'Dateizugriff nach Beendigung schliessen

Set handleDocListe = fso.OpenTextFile("c:\DocListe.txt", DateiLesen)'Datei
mit Ausdrücken zum Suchen und Ersetzen öffnen
d = handleDocListe.ReadAll 'Datei alles lesen
d = Replace(d,VbCrLf,"|") 'Absatzzeichen in Trennzeichen konvertieren
'Array bilden, aDocL(gerade)=Dateiname u.Pfad der Originaldatei ,
aDocL(Ungerade)=Dateiname u.Pfad der Kopie mit ersetzenten Begriffen
aDocL=Split(d,"|",-1,1)
handleDocListe.Close 'Dateizugriff nach Beendigung schliessen


For i = 0 to UBound(aDocL,1) Step 2
Word.Documents.Open(aDocL(i)) 'Word-Dokument öffnen, Array
aDocL(ungerade)=Pfad und Name der Originaldatei
Word.Visible= true 'optional verstecken
Word.Documents.Add '
Set DocInhalt = Doc.Content 'Inhalt des Dokumentes zugreifen
For ii = 0 to UBound(aSuE,1) Step 2 'Begriffe Suchen und Ersetzen (SuE)
SuEInhalt.Find.Execute FindText=aSuE(ii), _
ReplaceWith=aSuE(ii+1), Replace=wdReplaceAll
Next
Word.Documents.SaveAs(aDocL(i+1)) 'Array aDocL(gerade)= Name und Pfad
der abzuspeichernden Kopie
Word.Documents.Close(aDocL(i+1))
Next
mMsg=MsgBox("Es wurden " & UBound(aSuE,1) /2 & " Begriffe in " &
UBound(aDocL,1) /2 & " Dateien ersetzt.", 0 , "Suchen & Ersetzen in mehreren
Dateien")
--
Johannes Lorenz
Bensheim ,Germany
***@web.de
Nils Kaczenski [MVP]
2005-08-26 06:56:31 UTC
Permalink
Moin,
Post by Johannes
Ich verstehe das Objektmodell von Microsoft Word 2003 einfach nicht mehr. Mit
einem .vbs-Skript möchte ich mehrere bestimmte Word-Dokumente öffnen, mehrere
Begriffe auf einmal suchen und ersetzen und sie dann als Kopie abspeichern.
dann zeichne dir doch einfach in Word ein Makro auf, das Text ersetzt.
Danach öffnest du den Makrotext und kopierst dir die VBA-Befehle in dein
Skript. Damit solltest du zumindest weiterkommen.


Gruß, Nils
--
Nils Kaczenski - MVP Windows Server
NEU: www.faq-o-matic.net
Antworten bitte nur in die Newsgroup!
PM: Vorname at Nachname .de
Johannes
2005-08-27 17:19:02 UTC
Permalink
Klaro hab ich das probiert. Auch Mit Word Visual Basic Editor und Script
Editor.Der Beitrag von Jan hat mir geholfen.
Mein Fehler war es die ausgelassene Parameter mit Kommas zu ersetzen und
dies wurde nicht im Makro aufgezeigt. Auch der Objektkatalog half nicht
weiter. Dennoch danke Johannes

Const wdReplaceAll = 2
Const wdFindContinue = 1


sSourceDocPath = "c:\tst\quelle.doc"
sTargetDocPath = "c:\tst\ziel.doc"


strFindText = "etwas"
strTextReplace = "anderes"


Set objWord = CreateObject("Word.Application")
objWord.Visible = True
objWord.Documents.Open sSourceDocPath


Set objDoc = objWord.ActiveDocument
objDoc.Activate


With objWord.Selection.Find
.ClearFormatting
.Text = strFindText
.Replacement.ClearFormatting
.Replacement.Text = strTextReplace
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = False
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.MatchAllWordForms = False


' Function Execute([FindText], [MatchCase], [MatchWholeWord],
' [MatchWildcards], [MatchSoundsLike], [MatchAllWordForms], [Forward],
' [Wrap], [Format], [ReplaceWith], [Replace], [MatchKashida],
' [MatchDiacritics], [MatchAlefHamza], [MatchControl])


.Execute .Text,,,,,,,,,,wdReplaceAll,False,False,False,False


End With
objDoc.SaveAs sTargetDocPath
objDoc.Close False
objWord.Quit True
--
Johannes Lorenz
Bensheim ,Germany
Post by Nils Kaczenski [MVP]
Moin,
Post by Johannes
Ich verstehe das Objektmodell von Microsoft Word 2003 einfach nicht mehr. Mit
einem .vbs-Skript möchte ich mehrere bestimmte Word-Dokumente öffnen, mehrere
Begriffe auf einmal suchen und ersetzen und sie dann als Kopie abspeichern.
dann zeichne dir doch einfach in Word ein Makro auf, das Text ersetzt.
Danach öffnest du den Makrotext und kopierst dir die VBA-Befehle in dein
Skript. Damit solltest du zumindest weiterkommen.
Gruß, Nils
--
Nils Kaczenski - MVP Windows Server
NEU: www.faq-o-matic.net
Antworten bitte nur in die Newsgroup!
PM: Vorname at Nachname .de
Loading...