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
7 Antworten
- LÖSUNG 114757 schreibt am 24.03.2016 um 13:11:45 Uhr
- LÖSUNG Juckie schreibt am 24.03.2016 um 13:43:33 Uhr
- LÖSUNG 114757 schreibt am 24.03.2016 um 13:50:29 Uhr
- LÖSUNG Juckie schreibt am 24.03.2016 um 13:52:14 Uhr
- LÖSUNG 114757 schreibt am 24.03.2016 um 13:52:57 Uhr
- LÖSUNG Juckie schreibt am 24.03.2016 um 14:05:59 Uhr
- LÖSUNG Juckie schreibt am 24.03.2016 um 14:16:12 Uhr
- LÖSUNG Juckie schreibt am 24.03.2016 um 14:05:59 Uhr
- LÖSUNG 114757 schreibt am 24.03.2016 um 13:52:57 Uhr
- LÖSUNG Juckie schreibt am 24.03.2016 um 13:52:14 Uhr
- LÖSUNG 114757 schreibt am 24.03.2016 um 13:50:29 Uhr
- LÖSUNG Juckie schreibt am 24.03.2016 um 13:43:33 Uhr
LÖSUNG 24.03.2016, aktualisiert um 13:20 Uhr
Moin,
jede Section des Dokuments mit einer FOR-Schleife durchlaufen und die Header durchsuchen:
Oder wie hier beschrieben über die StoryRanges:
https://www.administrator.de/forum/word-seitenzahlen-suchstring-ermittel ...
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
'.......
https://www.administrator.de/forum/word-seitenzahlen-suchstring-ermittel ...
For Each story In objDoc.StoryRanges
story.Find.Execute ...................
Next
Gruß jodel32
LÖSUNG 24.03.2016 um 13:43 Uhr
Hallo jodel32,
und wo muss ich das in meinen Code einbauen?
Sorry, aber ich hab von der VBS Grütze echt keinen Plan :D
Kannst du mir nochmal helfen?
Vielen Dank
Gruß
Juckie
und wo muss ich das in meinen Code einbauen?
Sorry, aber ich hab von der VBS Grütze echt keinen Plan :D
Kannst du mir nochmal helfen?
Vielen Dank
Gruß
Juckie
LÖSUNG 24.03.2016 um 13:50 Uhr
Wie hast du dann den obigen Code erstellt wenn du keinen Plan hast ??
LÖSUNG 24.03.2016 um 13:52 Uhr
Ich habe im Internet das schon (fast) fertig gefunden.
LÖSUNG 24.03.2016, aktualisiert um 13:53 Uhr
Dann sollte man aber auch die Quelle nennen wenn man das hier postet.
LÖSUNG 24.03.2016 um 14:05 Uhr
Der Code ist schon etwas älter, daher kann ich nicht mehr sagen, woher ich den habe. Ich muss den nun für die Kopfzeilengeschichte eben halt anpassen.
LÖSUNG 24.03.2016 um 14:16 Uhr
Hallo jodel32,
ich habe es hinbekommen:
funktioniert es.
Vielen Dank
Gruß
Juckie
ich habe es hinbekommen:
for each sec in objDoc.Sections
With sec.Headers(1).Range.Find
funktioniert es.
Vielen Dank
Gruß
Juckie