VBS - Suchen und Ersetzen in Word 2010 in Kopfzeile
Hallo zusammen,
ich stehe bei einem VBS ein wenig auf dem Schlauch. Ich habe ein VBS, welches in Verzeichnissen und Unterverzeichnissen nach Word-Dokumenten sucht, dieses dann öffnet, nach einer bestimmten Zeichnfolge sucht und diese dann ggf. durch eine andere Zeichenfolge ersetzt. Das Word-Dokument wird daraufhin dann gespeichert und geschlossen:
Das funktioniert soweit auch ganz prima, sofern sich die Zeichenkette nicht in der Kopfzeile des Word Dokumentes befindet. Was fehlt dem VBS, damit die zu ersetzende Zeichenfolge auch in der Kopfzeile ersetzt wird? Kann mir jemand weiterhelfen?
Vielen Dank
Gruß
Juckie
ich stehe bei einem VBS ein wenig auf dem Schlauch. Ich habe ein VBS, welches in Verzeichnissen und Unterverzeichnissen nach Word-Dokumenten sucht, dieses dann öffnet, nach einer bestimmten Zeichnfolge sucht und diese dann ggf. durch eine andere Zeichenfolge ersetzt. Das Word-Dokument wird daraufhin dann gespeichert und geschlossen:
'Pfad zu den Dokumenten
Const strPathDocs = "C:\temp\test"
'Logfile für eventuell auftretende Fehler
Const strPathLogfile = "C:\temp\test\log.txt"
'Alter Name
Const strOldName = "aaaaaaaaaaa"
'Neuer Name
Const strNewName = "bbbbbbbbbbb"
Const wdReplaceAll = 2
Const wdFindContinue = 1
Set fso = Wscript.CreateObject("Scripting.Filesystemobject")
Set objWord = WScript.CreateObject("Word.Application")
'Wenn das ganze unsichtbar ablaufen soll nächste Zeile auf false setzen
objWord.Visible = True
objWord.DisplayAlerts = 0
'Im Ordner Rekursiv alle Word-Dokumente verarbeiten
parseFolders fso.GetFolder(strPathDocs), True
objWord.DisplayAlerts = -1
objWord.Quit True
Set fso = Nothing
Set objWord = Nothing
Function parseFolders(fldr, boolRecursion)
Set objLog = fso.OpenTextFile(strPathLogfile,8,True)
objLog.WriteLine("Aktuelles Verzeichnis: -> " & fldr)
objLog.Close
For Each file In fldr.Files
'Verarbeite nur Dateien mit den Endungen *.doc, *.docx, *.docm
If LCase(Right(file.Name, 3)) = "doc" Or LCase(Right(file.Name, 4)) = "docx" Or LCase(Right(file.Name, 4)) = "docm" Then
On Error Resume Next
Set objDoc = objWord.Documents.Open(file.Path)
'Falls ein Fehler aufgetreten ist, schreibe dies ins Logfile
If Err.Number <> 0 Then
Set objLog = fso.OpenTextFile(strPathLogfile,8,True)
objLog.WriteLine("Fehler beim öffnen der Datei: -> " & file.Path)
objLog.Close
Else
Set dlgTemplate = objWord.Dialogs(87)
'Alter Name suchen und durch neuen Namen ersetzen
'With objWord.Selection.Find
.ClearFormatting
.Text = strOldName
.Replacement.ClearFormatting
.Replacement.Text = strNewName
.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.Save
objDoc.Close True
End If
End if
Next
If boolRecursion Then
For Each subFolder in fldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Das funktioniert soweit auch ganz prima, sofern sich die Zeichenkette nicht in der Kopfzeile des Word Dokumentes befindet. Was fehlt dem VBS, damit die zu ersetzende Zeichenfolge auch in der Kopfzeile ersetzt wird? Kann mir jemand weiterhelfen?
Vielen Dank
Gruß
Juckie
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 300008
Url: https://administrator.de/contentid/300008
Ausgedruckt am: 22.11.2024 um 09:11 Uhr
7 Kommentare
Neuester Kommentar
Moin,
jede Section des Dokuments mit einer FOR-Schleife durchlaufen und die Header durchsuchen:
Oder wie hier beschrieben über die StoryRanges:
Word Seitenzahlen für Suchstring ermitteln
Gruß jodel32
jede Section des Dokuments mit einer FOR-Schleife durchlaufen und die Header durchsuchen:
'...
for each sec in objDoc.Sections
' Hiermit kommst du an den Text von wdHeaderFooterFirstPage der Section
msgbox sec.Headers(2).Range.Text
' HIermit kommst du an den Text von wdHeaderFooterPrimary der Section
msgbox sec.Headers(1).Range.Text
Next
'.......
Word Seitenzahlen für Suchstring ermitteln
For Each story In objDoc.StoryRanges
story.Find.Execute ...................
Next
Gruß jodel32
Wie hast du dann den obigen Code erstellt wenn du keinen Plan hast ??
Dann sollte man aber auch die Quelle nennen wenn man das hier postet.