juckie
Goto Top

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:

'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

Content-ID: 300008

Url: https://administrator.de/contentid/300008

Ausgedruckt am: 22.11.2024 um 09:11 Uhr

114757
Lösung 114757 24.03.2016 aktualisiert um 13:20:55 Uhr
Goto Top
Moin,
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
'.......  
Oder wie hier beschrieben über die StoryRanges:
Word Seitenzahlen für Suchstring ermitteln
For Each story In objDoc.StoryRanges
        story.Find.Execute ...................
Next

Gruß jodel32
Juckie
Juckie 24.03.2016 um 13:43:33 Uhr
Goto Top
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
114757
114757 24.03.2016 um 13:50:29 Uhr
Goto Top
Wie hast du dann den obigen Code erstellt wenn du keinen Plan hast ??
Juckie
Juckie 24.03.2016 um 13:52:14 Uhr
Goto Top
Ich habe im Internet das schon (fast) fertig gefunden.
114757
114757 24.03.2016 aktualisiert um 13:53:11 Uhr
Goto Top
Zitat von @Juckie:
Ich habe im Internet das schon (fast) fertig gefunden.
Dann sollte man aber auch die Quelle nennen wenn man das hier postet.
Juckie
Juckie 24.03.2016 um 14:05:59 Uhr
Goto Top
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.
Juckie
Juckie 24.03.2016 um 14:16:12 Uhr
Goto Top
Hallo jodel32,

ich habe es hinbekommen:

		for each sec in objDoc.Sections
			With sec.Headers(1).Range.Find

funktioniert es.

Vielen Dank

Gruß

Juckie