Office 2010, Word Verknüpfte Vorlage per VBA entfernen
Hallo zusammen,
wir haben in vielen Dokumenten in Word eine Vorlagen-Verknüpung (Datei -> Optionen -> AddIns -> Vorlagen enthalten die nicht mehr relevant sind und entfernt werden müssen.
Diese zeigen auf einen alten Server der nicht mehr existiert und deshalb dauert das öffnen der Dokumente eine kleine Ewigkeit. Diese Verknüpfungen sehen in etwa so aus:
\\192.168.3.1\daten\WBS\Personal\Arbeitsvertraege EUR\die_alte_vorlage.dotx
Nun ist es nicht machbar alle Dokumente per Hand zu öffen und diese Verknüpfung zu entfernen. Bei Microsoft habe ich hierzu folgenden Artikel bzw. Lösung mittels VBA gefunden:
http://support.microsoft.com/?kbid=830561#4
Habe darin also lediglich die Variable OldServer entsprechend angepasst:
Sub Test()
Dim strFilePath As String
Dim strPath As String
Dim intCounter As Integer
Dim strFileName As String
Dim OldServer As String
Dim objDoc As Document
Dim objTemplate As Template
Dim dlgTemplate As Dialog
Dim nServer As Integer
'hardcode the name of the old server.
OldServer = "{192.168.3.1}"
nServer = Len(OldServer)
strFilePath = InputBox("What is the folder location that you want to use?")
If Right(strFilePath, 1) <> "\" Then strFilePath = strFilePath & "\"
strFileName = Dir(strFilePath & "*.doc")
Do While strFileName <> ""
Set objDoc = Documents.Open(strFilePath & strFileName)
Set objTemplate = objDoc.AttachedTemplate
Set dlgTemplate = Dialogs(wdDialogToolsTemplates)
strPath = dlgTemplate.Template
If LCase(Left(strPath, nServer)) = LCase(OldServer) Then
objDoc.AttachedTemplate = NormalTemplate
End If
strFileName = Dir()
objDoc.Save
objDoc.Close
Loop
Set objDoc = Nothing
Set objTemplate = Nothing
Set dlgTemplate = Nothing
End Sub
Wenn ich das Skript starte wir der Pfad abgefragt und es werden auch die Dokumente geöffnet und wieder geschlossen aber danach ist die Verknüpfung noch immer enthalten. Was mache ich falsch?
Viele Grüße
pixel24
wir haben in vielen Dokumenten in Word eine Vorlagen-Verknüpung (Datei -> Optionen -> AddIns -> Vorlagen enthalten die nicht mehr relevant sind und entfernt werden müssen.
Diese zeigen auf einen alten Server der nicht mehr existiert und deshalb dauert das öffnen der Dokumente eine kleine Ewigkeit. Diese Verknüpfungen sehen in etwa so aus:
\\192.168.3.1\daten\WBS\Personal\Arbeitsvertraege EUR\die_alte_vorlage.dotx
Nun ist es nicht machbar alle Dokumente per Hand zu öffen und diese Verknüpfung zu entfernen. Bei Microsoft habe ich hierzu folgenden Artikel bzw. Lösung mittels VBA gefunden:
http://support.microsoft.com/?kbid=830561#4
Habe darin also lediglich die Variable OldServer entsprechend angepasst:
Sub Test()
Dim strFilePath As String
Dim strPath As String
Dim intCounter As Integer
Dim strFileName As String
Dim OldServer As String
Dim objDoc As Document
Dim objTemplate As Template
Dim dlgTemplate As Dialog
Dim nServer As Integer
'hardcode the name of the old server.
OldServer = "{192.168.3.1}"
nServer = Len(OldServer)
strFilePath = InputBox("What is the folder location that you want to use?")
If Right(strFilePath, 1) <> "\" Then strFilePath = strFilePath & "\"
strFileName = Dir(strFilePath & "*.doc")
Do While strFileName <> ""
Set objDoc = Documents.Open(strFilePath & strFileName)
Set objTemplate = objDoc.AttachedTemplate
Set dlgTemplate = Dialogs(wdDialogToolsTemplates)
strPath = dlgTemplate.Template
If LCase(Left(strPath, nServer)) = LCase(OldServer) Then
objDoc.AttachedTemplate = NormalTemplate
End If
strFileName = Dir()
objDoc.Save
objDoc.Close
Loop
Set objDoc = Nothing
Set objTemplate = Nothing
Set dlgTemplate = Nothing
End Sub
Wenn ich das Skript starte wir der Pfad abgefragt und es werden auch die Dokumente geöffnet und wieder geschlossen aber danach ist die Verknüpfung noch immer enthalten. Was mache ich falsch?
Viele Grüße
pixel24
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 227048
Url: https://administrator.de/contentid/227048
Ausgedruckt am: 24.11.2024 um 23:11 Uhr
13 Kommentare
Neuester Kommentar
Hallo pixel24,
hatte hier dazu schon mal ein ähnliches VBS-Script gespostet, das den Servernamen im Template durch einen anderen ersetzt. Habe es dir nun so angepasst das es das verknüpfte Template auf die Normal.dotm zurücksetzt. Das Script durchläuft einen Ordner rekursiv und ändert alle Word-Dokumente mit den Endungen *.doc / *.docx / *.docm. Ob rekursiv oder nicht lässt sich mit dem zweiten Parameter in Zeile 14 ändern (True in False ändern)
In Zeile 2 muss der Pfad zum Root-Ordner der durchsucht werden soll angegeben werden, in Zeile 4 ein Pfad zu einer Log-Datei die im Fehlerfall die betreffenden Dokumente auflistet, und in Zeile 6 der Servername welcher im Template vorkommen muss damit die Vorlage zurückgesetzt wird.
Grüße Uwe
hatte hier dazu schon mal ein ähnliches VBS-Script gespostet, das den Servernamen im Template durch einen anderen ersetzt. Habe es dir nun so angepasst das es das verknüpfte Template auf die Normal.dotm zurücksetzt. Das Script durchläuft einen Ordner rekursiv und ändert alle Word-Dokumente mit den Endungen *.doc / *.docx / *.docm. Ob rekursiv oder nicht lässt sich mit dem zweiten Parameter in Zeile 14 ändern (True in False ändern)
In Zeile 2 muss der Pfad zum Root-Ordner der durchsucht werden soll angegeben werden, in Zeile 4 ein Pfad zu einer Log-Datei die im Fehlerfall die betreffenden Dokumente auflistet, und in Zeile 6 der Servername welcher im Template vorkommen muss damit die Vorlage zurückgesetzt wird.
VBS-Script
'Pfad zu den Dokumenten
Const strPathDocs = "E:\docs"
'Logfile für eventuell auftretende Fehler
Const strPathLogfile = "E:\docs\logfile.txt"
'Alter Servername
strOldServer = "\\192.168.3.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)
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)
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 = objWord.Dialogs(87)
If Instr(1,dlgTemplate.Template, strOldServer,1) then
objDoc.RemoveDocumentInformation (9)
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
Zitat von @pixel24:
ich bin absolut nicht bewandert in VBA/Makros. Das Skript was ich von der MS-Seite habe fänt mit 'Sub Test' an und
endet mit 'End Sub'. Dass scheint der Name des Makros zu sein. Bei deinem Skript ist es 'Function. Bau ich da ein
Sub drum herum?
Das ist ein VBS-Script, welches du nicht in ein Word-VBA-Projekt einbaust sondern in eine Textdatei mit der Endung *.vbs einfügst und es dann per Doppelklick startest.ich bin absolut nicht bewandert in VBA/Makros. Das Skript was ich von der MS-Seite habe fänt mit 'Sub Test' an und
endet mit 'End Sub'. Dass scheint der Name des Makros zu sein. Bei deinem Skript ist es 'Function. Bau ich da ein
Sub drum herum?
Grüße Uwe
OK, zuerst mal solltet Ihr sicherstellen das der alte Serverpfad vorübergehend wieder erreichbar ist damit der Batchvorgang schneller vonstatten geht und Word nicht unendlich auf die verknüpfte Vorlage wartet.
Habe den obigen Code geringfügig angepasst, sollte damit jetzt einwandfrei laufen; habe es mit deinem Dokument positiv getestet.
Grüße Uwe
Habe den obigen Code geringfügig angepasst, sollte damit jetzt einwandfrei laufen; habe es mit deinem Dokument positiv getestet.
Grüße Uwe
Zitat von @pixel24:
Den alten Server-Pfad zur Verfügung stellen wäre nur schwer möglich da das neue Netz in einem ganz anderen Bereich
(Netmask) liegt.
Klappt es trotzdem, auch wenn der alte Pfad nicht erreichbar ist?
ja, aber eben langsamer.Den alten Server-Pfad zur Verfügung stellen wäre nur schwer möglich da das neue Netz in einem ganz anderen Bereich
(Netmask) liegt.
Klappt es trotzdem, auch wenn der alte Pfad nicht erreichbar ist?
Du kannst doch via Hosts-Datei den Pfad entsprechend auf einen anderen Server umbiegen wo die alten Vorlagen liegen, das ist doch kein Problem ....
z.B. so auf die 192.168.1.3 auf die 10.10.20.4 umbiegen:
Hosts-File
10.10.20.4 192.168.1.3
Hallo Frank,
falls es dich noch interessiert, ich hatte dazu auch eine Powershell-Version entwickelt die auch ohne das einzelne Öffnen der Dateien auskommt.
Pfad der Dokumentenvorlage mit einem Powershell Script ändern?
Grüße Uwe
falls es dich noch interessiert, ich hatte dazu auch eine Powershell-Version entwickelt die auch ohne das einzelne Öffnen der Dateien auskommt.
Pfad der Dokumentenvorlage mit einem Powershell Script ändern?
Grüße Uwe