VBA Script - Pfade zu Dokumentevorlagen anpassen
Guten Morgen an alle,
wir haben unser zentrales Dokumentenverzeichnis auf einen anderen Server umgezogen. Nun befinden sich in dem Dokumentenverzeichnis Word Dokumente die mit Vorlagen verknüpft sind, welche in dem Dokumentenverzeichnis liegen. Der Servername ist jedoch nicht der gleiche. Das Resultat ist nun, dass das Öffnen eines Word-Dokumentes relativ lange dauert, da der Pfad zur Dokumentenvorlage, mit welchem das Word-Dokument verknüpft ist, nicht mehr existiert. Umbenennen des Servers ist leider nicht möglich. Ich weiß, dass es ungünstig ist, Vorlagen auf einem Serverlaufwerk zu speichern, jedoch ist das, ich sag mal, historisch so gewachsen.
Ich habe nun hier im Forum ein Script gefunden, welches zwar den Pfad zur verknüpften Dokumentenvorlage entfernt, jedoch ist das nicht genau das, was ich benötige.
Das Ziel sollte sein, den Pfad zur verknüpften Dokumentenvorlage zu ändern. Leider bekomme ich es irgendwie nicht, da meine Kenntnisse in VBA praktisch 0 sind. Könnte von euch vielleicht jemand einen Blick auf das Skript werfen und mir sagen, an welcher Stelle ich da ansetzen muss.
Vielen Dank im Voraus
Gruß
Juckie
wir haben unser zentrales Dokumentenverzeichnis auf einen anderen Server umgezogen. Nun befinden sich in dem Dokumentenverzeichnis Word Dokumente die mit Vorlagen verknüpft sind, welche in dem Dokumentenverzeichnis liegen. Der Servername ist jedoch nicht der gleiche. Das Resultat ist nun, dass das Öffnen eines Word-Dokumentes relativ lange dauert, da der Pfad zur Dokumentenvorlage, mit welchem das Word-Dokument verknüpft ist, nicht mehr existiert. Umbenennen des Servers ist leider nicht möglich. Ich weiß, dass es ungünstig ist, Vorlagen auf einem Serverlaufwerk zu speichern, jedoch ist das, ich sag mal, historisch so gewachsen.
Ich habe nun hier im Forum ein Script gefunden, welches zwar den Pfad zur verknüpften Dokumentenvorlage entfernt, jedoch ist das nicht genau das, was ich benötige.
Das Ziel sollte sein, den Pfad zur verknüpften Dokumentenvorlage zu ändern. Leider bekomme ich es irgendwie nicht, da meine Kenntnisse in VBA praktisch 0 sind. Könnte von euch vielleicht jemand einen Blick auf das Skript werfen und mir sagen, an welcher Stelle ich da ansetzen muss.
Vielen Dank im Voraus
'Pfad zu den Dokumenten
Const strPathDocs = "C:\temp\0003\test"
'Logfile für eventuell auftretende Fehler
Const strPathLogfile = "C:\temp\0003\test\logfile.txt"
'Alter Servername
strOldServer = "\\1.1.1.1\dok"
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), False
objWord.DisplayAlerts = -1
objWord.Quit True
Set fso = Nothing
Set objWord = Nothing
Function parseFolders(fldr, boolRecursion)
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
If Err.Number <> 0 Then
Set objLog = fso.OpenTextFile(strPathLogfile, 3, True)
objLog.WriteLine ("Fehler beim öffnen der Datei: -> " & file.Path)
objLog.Close
Else
Set dlgTemplate = Application.Dialogs(87)
If InStr(1, dlgTemplate.Template, strOldServer, 1) Then
Set objDoc = objWord.Documents.Open(file.Path)
Set attTmpl = objDoc.AttachedTemplate.Path
MsgBox ActiveDocument.AttachedTemplate
'Dim attTmpl as String = objDoc.AttachedTemplate
attTmpl = Replace(attTmpl, "\\1.1.1.1\dok", "\\1.1.1.2\dok")
objDoc.AttachedTemplate = attTmpl
objDoc.Save
objDoc.Close True
Else
objDoc.Close False
End If
End If
End If
Next
If boolRecursion Then
For Each subFolder In fldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
Gruß
Juckie
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 239435
Url: https://administrator.de/forum/vba-script-pfade-zu-dokumentevorlagen-anpassen-239435.html
Ausgedruckt am: 08.04.2025 um 23:04 Uhr
11 Kommentare
Neuester Kommentar

Hallo Juckie!
Soweit ich das sehe, brauchst nur in Codezeile 37 für das erste String-Argument den alten Pfad und für das zweite String-Argument den neuen Pfad bzw. nur den zu ersetzenden Teil anzugeben...
Grüße Dieter
Soweit ich das sehe, brauchst nur in Codezeile 37 für das erste String-Argument den alten Pfad und für das zweite String-Argument den neuen Pfad bzw. nur den zu ersetzenden Teil anzugeben...
Grüße Dieter
Moin Juckie,
Ihr habt ja auch mein Script mit euren Abänderungen total durcheinander gebracht!
Zur Info das ist ein VBS- und kein VBA-Script ... und sollte auch aus einem VBS-Script aus ausgeführt werden.
so sollte es laufen...
Grüße Uwe
Ihr habt ja auch mein Script mit euren Abänderungen total durcheinander gebracht!
Zur Info das ist ein VBS- und kein VBA-Script ... und sollte auch aus einem VBS-Script aus ausgeführt werden.
so sollte es laufen...
'Pfad zu den Dokumenten
Const strPathDocs = "C:\temp\0003\test"
'Logfile für eventuell auftretende Fehler
Const strPathLogfile = "C:\temp\0003\test\logfile.txt"
'Alter Servername
Const strOldServer = "\\1.1.1.1\dok"
'Neuer Servername
Const strNewServer = "\\1.1.1.2\dok"
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)
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)
' Wenn der alte Serverpfad in der Vorlage gefunden wurde, starte Ersetzung der Vorlage
If InStr(1,dlgTemplate.Template,strOldServer,1) Then
'neuen Vorlagenpfad erstellen
newTemplate = Replace(dlgTemplate.Template,strOldServer,strNewServer,1,1,1)
' Entfernen der Vorlageninformationen
objDoc.RemoveDocumentInformation (9)
' neue Vorlage zuweisen
objDoc.AttachedTemplate = newTemplate
' Dokument speichern und schließen
objDoc.Save
objDoc.Close True
Else
' Dokument schließen und nicht speichern
objDoc.Close False
End If
End If
End if
Next
If boolRecursion Then
For Each subFolder in fldr.SubFolders
parseFolders subFolder, True
Next
End If
End Function
hatte noch kurz was abgeändert, hier läuft es einwandfrei. Du solltest auch beachten das du keine neue *.dotx-Vorlage an ein altes *.doc anhängen kannst, das funktioniert nicht !
Grüße Uwe
Grüße Uwe
nein, der komplette Name mit Pfad wird hier zusammengebaut :
Du verwechselst hier Dinge...
objDoc.AttachedTemplate = Replace(objDoc.AttachedTemplate.Path,strOldServer,strNewServer,1,1,1) & "\" & objDoc.AttachedTemplate.Name
Zur Info: Zum Anpassen der Dokumente sollte der alte Pfad vorübergehend zur Verfügung gestellt werden. Wie sich das machen lässt habe ich in diesem Beitrag geschrieben: Alte Server Verknüpfung bei Clients löschen
man kann das ganze zwar in Zeile 36 so abändern:
aber so bleiben noch interne Verweise zum alten Server erhalten.
Also besser den alten Server-Pfad dem Client zur Verfügung stellen.
Grüße Uwe
man kann das ganze zwar in Zeile 36 so abändern:
objDoc.AttachedTemplate = Replace(dlgTemplate.Template,strOldServer,strNewServer,1,1,1)
Also besser den alten Server-Pfad dem Client zur Verfügung stellen.
Grüße Uwe

Hallo zusammen!
Nur der Vollständigkeit halber:
Name: Enthält nur Name
Path: Enthält nur den Ordnerpfad
FullName: Enthält den vollständigen Pfad
Grüße Dieter
Nur der Vollständigkeit halber:
Name: Enthält nur Name
Path: Enthält nur den Ordnerpfad
FullName: Enthält den vollständigen Pfad
Grüße Dieter
So, habe das ganze in deinem Fall mal analysiert und habe oben den Code entsprechend abgeändert. Damit sollte es jetzt funktionieren. Hier mit einem deiner Testdokumente erfolgreich getestet.
Es wird nun zusätzlich mit objDoc.RemoveDocumentInformation (9) die Vorlagenreferenz entfernt bevor die neue Dokumentvorlage zugewiesen wird.
Grüße Uwe
Es wird nun zusätzlich mit objDoc.RemoveDocumentInformation (9) die Vorlagenreferenz entfernt bevor die neue Dokumentvorlage zugewiesen wird.
Grüße Uwe