Auto-Datumsfeld in Word durch Erstellungsdatum ersetzen
Hallo zusammen,
folgendes Problem: In mehreren Word-Dateien sind in der Fußzeile Auto-Datums-Felder (bzw. eins pro Datei) hinzugefügt worden. Diese dürften eigentlich nicht da sein und müssen durch das Erstellungsdatum ersetzt werden.
Gibt es hier eine Möglichkeit dies ohne extremen Aufwand zu erledigen?
Es sind sowhl Word 97 als auch 2007 Dateien (also .doc und .docx)
Problem: Diese Dateien sind in mehreren Unterverzeichnissen. Das Ändern müsste also von einer Root-Ebene Rekursiv laufen.
EDIT: Ich muss im Prinzip den Teil: { TIME \@ "dd.MM.yyyy" } durch diesen ersetzen: { CREATEDATE \@ "dd.MM.yyyy" }
Gruß
folgendes Problem: In mehreren Word-Dateien sind in der Fußzeile Auto-Datums-Felder (bzw. eins pro Datei) hinzugefügt worden. Diese dürften eigentlich nicht da sein und müssen durch das Erstellungsdatum ersetzt werden.
Gibt es hier eine Möglichkeit dies ohne extremen Aufwand zu erledigen?
Es sind sowhl Word 97 als auch 2007 Dateien (also .doc und .docx)
Problem: Diese Dateien sind in mehreren Unterverzeichnissen. Das Ändern müsste also von einer Root-Ebene Rekursiv laufen.
EDIT: Ich muss im Prinzip den Teil: { TIME \@ "dd.MM.yyyy" } durch diesen ersetzen: { CREATEDATE \@ "dd.MM.yyyy" }
Gruß
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 215940
Url: https://administrator.de/forum/auto-datumsfeld-in-word-durch-erstellungsdatum-ersetzen-215940.html
Ausgedruckt am: 07.04.2025 um 08:04 Uhr
15 Kommentare
Neuester Kommentar
Hallo killtec,
könnte man mit folgendem VBS-Script so lösen:
In Zeile 1 noch den Root-Pfad zu dem Dokumenten angeben.
probiers mal aus...
Grüße Uwe
könnte man mit folgendem VBS-Script so lösen:
In Zeile 1 noch den Root-Pfad zu dem Dokumenten angeben.
Const strPathDocs = "E:\Scripte\docs"
Set fso = Wscript.CreateObject("Scripting.Filesystemobject")
Set objWord = WScript.CreateObject("Word.Application")
'Wenns unsichtbar passieren soll hier auf false setzen
objWord.Visible = True
objWord.DisplayAlerts = 0
parseFolders fso.GetFolder(strPathDocs), True
objWord.DisplayAlerts = -1
objWord.Quit True
Set fso = Nothing
Set objWord = Nothing
Function parseFolders(fldr, boolRecursion)
For Each file In fldr.Files
If LCase(Right(file.Name, 3)) = "doc" Or LCase(Right(file.Name, 4)) = "docx" Then
set objDoc = objWord.Documents.Open(file.Path)
For Each section In objDoc.Sections
For Each f In section.Footers(1).Range.Fields
If UCase(Left(Trim(f.Code), 4)) = "TIME" Then
f.Select
objDoc.Fields.Add objWord.Selection.Range, 21, "\@ ""dd.MM.yyyy""",True
End If
Next
Next
objDoc.Close True
End If
Next
If boolRecursion Then
For Each subFolder in fldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Grüße Uwe
Zitat von @killtec:
Hallo Uwe,
das Script öffnet zumindest die Files. Diese werden jedoch direkt wieder geschlossen. Eine Änderunge sehe ich leider
Die Überprüfung geht halt so schnell das du es halt nicht siehst, jedes doc wird nach der Bearbeitung ja wieder geschlossen. Haben die Dokumente zufällig Fußzeilen speziell für die erste Seite ? Dann muss man noch eine zusätzliche Prüfung dieser "Footers" vornehmen.Hallo Uwe,
das Script öffnet zumindest die Files. Diese werden jedoch direkt wieder geschlossen. Eine Änderunge sehe ich leider
Beim Überprüfen der Dateien ist mir aufgefallen, dass es auch über den Befehl "DATE"
eingefügt sein kann. Demnach müsste ich ja die Zeile 22 vor dem Then mit diesem erweitern oder?:
hat, sehe ich das richtig?
Ja klar kannst du machen, hatte es nur so geschrieben weil du explizit geschrieben hattest das die Dokumente "Time" verwenden.eingefügt sein kann. Demnach müsste ich ja die Zeile 22 vor dem Then mit diesem erweitern oder?:
hat, sehe ich das richtig?
Wie sieht es mit dem Speichern aus? Muss hier vor dem objDoc.Close True noch ein Save?
Normalerweise nicht denn das True bedeutet das das Dokument beim schließen gespeichert wird.also in der Fußzeile ist das Feld "Erste Seite anders" aktiviert. Vermutlich liegt es daran
wenn die Fußzeile explizit für die erste Seite definiert ist muss die Zeile 21 so geändert werden:For Each f In section.Footers(2).Range.Fields
Footers(x)
:wdHeaderFooterPrimary = 1
wdHeaderFooterFirstPage = 2
wdHeaderFooterEvenPages = 3
so kämen wir dann zu folgendem Script:
Const strPathDocs = "E:\Scripte\docs"
Set fso = Wscript.CreateObject("Scripting.Filesystemobject")
Set objWord = WScript.CreateObject("Word.Application")
objWord.Visible = True
objWord.DisplayAlerts = 0
parseFolders fso.GetFolder(strPathDocs), True
objWord.DisplayAlerts = -1
objWord.Quit True
Set fso = Nothing
Set objWord = Nothing
Function parseFolders(fldr, boolRecursion)
For Each file In fldr.Files
If LCase(Right(file.Name, 3)) = "doc" Or LCase(Right(file.Name, 4)) = "docx" Then
set objDoc = objWord.Documents.Open(file.Path)
For Each section In objDoc.Sections
For i = 1 To 3
For Each f In section.Footers(i).Range.Fields
If UCase(Left(Trim(f.Code), 4)) = "TIME" Or UCase(Left(Trim(f.Code), 4)) = "DATE" Then
f.Select
objDoc.Fields.Add objWord.Selection.Range, 21, "\@ ""dd.MM.yyyy""",True
End If
Next
Next
Next
objDoc.Close True
End If
Next
If boolRecursion Then
For Each subFolder in fldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Sorry wenn's etwas später geworden ist ...
hier eine Version mit weiterer Fehlerbehandlung und Logfile (Pfad dazu in Zeile 2 eintragen):
schönen Feierabend
G. Uwe
hier eine Version mit weiterer Fehlerbehandlung und Logfile (Pfad dazu in Zeile 2 eintragen):
Const strPathDocs = "E:\Tempfolder\Scripte\docs"
Const strPathLogfile = "E:\Tempfolder\Scripte\docs\logfile.txt"
Set fso = Wscript.CreateObject("Scripting.Filesystemobject")
Set objWord = WScript.CreateObject("Word.Application")
objWord.Visible = True
objWord.DisplayAlerts = 0
parseFolders fso.GetFolder(strPathDocs), True
objWord.DisplayAlerts = -1
objWord.Quit True
Set fso = Nothing
Set objWord = Nothing
Function parseFolders(fldr, boolRecursion)
For Each file In fldr.Files
If LCase(Right(file.Name, 3)) = "doc" Or LCase(Right(file.Name, 4)) = "docx" Then
On Error Resume Next
Set objDoc = objWord.Documents.Open(file.Path)
If Err.Number <> 0 Then
Set objLog = fso.OpenTextFile(strPathLogfile,3,True)
objLog.WriteLine("Fehler beim öffnen der Datei: -> " & file.Path)
objLog.Close
Else
For Each section In objDoc.Sections
For i = 1 To 3
For Each f In section.Footers(i).Range.Fields
If UCase(Left(Trim(f.Code), 4)) = "TIME" Or UCase(Left(Trim(f.Code), 4)) = "DATE" Then
f.Select
objDoc.Fields.Add objWord.Selection.Range, 21, "\@ ""dd.MM.yyyy""",True
End If
Next
Next
Next
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
schönen Feierabend
G. Uwe