pixel24
Goto Top

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

Content-ID: 227048

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

Ausgedruckt am: 24.11.2024 um 23:11 Uhr

colinardo
Lösung colinardo 18.01.2014, aktualisiert am 28.05.2014 um 13:11:46 Uhr
Goto Top
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.
back-to-topVBS-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
Grüße Uwe
pixel24
pixel24 18.01.2014 um 10:34:12 Uhr
Goto Top
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?
colinardo
Lösung colinardo 18.01.2014, aktualisiert am 27.01.2014 um 09:43:45 Uhr
Goto Top
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.

Grüße Uwe
pixel24
pixel24 22.01.2014 um 07:18:26 Uhr
Goto Top
Hallo,

habe also die Datei als test.vbs gespeichert und die Die Pfade angepasst. Wenn ich es ausführe wird auch das Dokument (zum testen nur eines) welches im Pfad liegt geöffnet und anschließend wieder geschlossen.

Wenn ich jedoch anschließend versuche dieses Dokument ganz normal zu öffnen erscheint wieder:

Kontaktaufnahme: \\192.168.3.1\daten\WBS\Personal\Arbeitsvertraege EUR\die_alte_vorlage.dotx

also ist die Vorlage nach wie vor enthalten. Woran kann das liegen?

Viele Grüße
pixel24
colinardo
Lösung colinardo 22.01.2014, aktualisiert am 27.01.2014 um 09:43:47 Uhr
Goto Top
poste mal ein Link zur Datei, du kannst ja alles private daraus entfernen ...
pixel24
pixel24 25.01.2014 um 10:22:48 Uhr
Goto Top
colinardo
Lösung colinardo 25.01.2014, aktualisiert am 27.01.2014 um 09:43:50 Uhr
Goto Top
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
pixel24
pixel24 25.01.2014 um 11:43:53 Uhr
Goto Top
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. Die Zeit wäre nicht so tragisch da ich es in Häppchen jeweils über's Wochenende laufen lassen würde.

Klappt es trotzdem, auch wenn der alte Pfad nicht erreichbar ist?
colinardo
Lösung colinardo 25.01.2014, aktualisiert am 27.01.2014 um 09:43:52 Uhr
Goto Top
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.
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:
back-to-topHosts-File
10.10.20.4    192.168.1.3
pixel24
pixel24 27.01.2014 um 09:43:16 Uhr
Goto Top
ok, dass ich die Hosts-Datei auch zur IP-IP - Suflösung nutzen kann wusste ich nicht. Danke , für den Hinweis. Wieder etwas gelernt.

Zum Skript. Ich fehlerfrei durch gelaufen.

VIELEN HERZLICHEN DANK!!
frankmann2
frankmann2 30.03.2015 um 13:49:49 Uhr
Goto Top
Vielen Dank, hatte das gleiche Problem - HATTE face-wink
Gruß
Frank
colinardo
colinardo 30.03.2015 aktualisiert um 14:01:47 Uhr
Goto Top
Zitat von @frankmann2:
Vielen Dank, hatte das gleiche Problem - HATTE face-wink
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
frankmann2
frankmann2 30.03.2015 um 15:44:10 Uhr
Goto Top
Hallo Uwe,
werde ich morgen ausproblieren.Hast mir sehr geholfen, Danke.

Grüße Frank