User Tools

Site Tools


microsoft:scripting:vbscript:scripts:whichtemplate

Script om alle Word bestanden in een directory na te gaan op de gebruikte templates.
Uitvoer van script komt in strLogFilePath en voortgang word bijgehouden in strCheckedFiles, zodat het script herstart kan worden en dan oppakt waar het gebleven was.

Versie 2

'WhichTemplate.vbs
'Gebaseerd op code van http://support.microsoft.com/?kbid=823372
'Getest met Word 2003 SP2.
'20081103 v1.
'20081105 v2, nu met voortgangs en hervattings code.
 
strFilePath = InputBox("Which directory?")
strLogFilePath = "C:\temp\listofdoctemplates.txt"
strCheckedFiles = "C:\temp\checkeddocs.txt"
CONST bReadOnly = True
CONST bDontConfirmConversion = False
'CONST msoAutomationSecurityForceDisable = 3
CONST ForReading = 1
CONST ForWriting = 2
CONST ForAppending = 8
CONST bCreate = True
 
If Right(strFilePath, 1) <> "\" Then
 
	strFilePath = strFilePath & "\"
 
End If
 
'Maak de benodigde objecten.
Set objFso = CreateObject("Scripting.FileSystemObject")
 
Set WorkFolder = objFso.GetFolder(strFilePath)
 
Set objWord = CreateObject("Word.Application")
 
'Word moet onzichtbaar geopend worden.
objWord.Visible=False
 
'Waarschuwingen hoeven niet te worden weergegeven.
objWord.DisplayAlerts=False
 
'Haal de huidige security setting op.
'lngAutomation = objWord.AutomationSecurity
'Pas de security setting aan om macro's uit te schakelen.
'objWord.AutomationSecurity = msoAutomationSecurityForceDisable
'Bovenstaande code werkt wel, maar popup verschijnt dat macro's zijn uitgezet die je weer moet wegklikken.
'Onderstaande gevonden via http://social.msdn.microsoft.com/forums/en-US/vsto/thread/4c9daac8-06b8-413f-8b2f-12e3b6089fbb/
objWord.WordBasic.DisableAutoMacros
 
'Als het lobestand al bestaat...
If objFso.FileExists(strLogFilePath) Then
 
	'Open het voor toevoegen.
	Set fhLogFile = objFso.OpenTextFile(strLogFilePath, ForAppending)
 
Else
 
	'Zo niet, omaak het bestand dan aan.
	Set fhLogFile = objFso.OpenTextFile(strLogFilePath, ForWriting, bCreate)
 
End If
 
'Als het voortgangsbestand al bestaat...
If objFso.FileExists(strCheckedFiles) Then
 
	'Open het voortgangsbestand voor lezen.
	Set fhCheckedFiles = objFso.OpenTextFile(strCheckedFiles, ForReading)
 
	c = 0
 
	'Lees alle regels uit het voortgangsbestand in een array.
	Do While Not fhCheckedFiles.AtEndOfStream
 
		'Laat de array groeien.
		Redim Preserve arrayCheckedFiles(c)
 
		'Lees een regel uit het voortgangsbestand in.
		arrayCheckedFiles(c) = fhCheckedFiles.ReadLine
 
		c = c + 1
 
	Loop
 
	'Sluit het voortgangsbestand.
	fhCheckedFiles.Close()
 
	'Open het voortgangsbestand opnieuw, maar nu voor toevoegen.
	Set fhCheckedFiles = objFso.OpenTextFile(strCheckedFiles, ForAppending)
 
Else
 
	'Zo niet, maak het voortgangsbestand aan.
	Set fhCheckedFiles = objFso.OpenTextFile(strCheckedFiles, ForWriting, bCreate)
 
	'Schrijf alvast de eerste regel in het voortgangsbestand.
	'Dit om te voorkomen dat hiermee een tekstbestand aangemaakt word,
	'wat na een vastloper van het script leeg is en problemen geeft bij uitlezen.
	fhCheckedFiles.WriteLine("---------------" & Now & "---------------")
 
End If
 
'Voor elk bestand in de opgegeven folder...
For Each file in WorkFolder.Files
 
	'Als het om een niet tijdelijk Word document gaat, dan...
	If objFso.GetExtensionName(file.Name) = "doc" And Left(file.Name, 1) <> "~" Then
 
		'Lees het voortgangsbestand in.
		'Moet een lege array teruggeven als bestand niet in de lijst voorkomt.
		arrayResults = Filter(arrayCheckedFiles, strFilePath & file.Name)
 
		'Als het huidige bestand niet gelijk is aan een bestand in arrayCheckedFiles, dan...
		'Bij een lege array geeft UBound -1 terug, bij een array met één waarde 0, met twee waardes 1, enz.
		If UBound(arrayResults) = -1 Then
 
			'Als je dit script silent wil laten lopen, zet dan een ' voor onderstaande regel.
			'Als je dit script met cscript in een cmd start, kun je bijhouden hoever het proces is.
			WScript.Echo strFilePath & file.Name
 
			'Open het Word document readonly.
			Set objDoc = objWord.Documents.Open(strFilePath & file.Name, bDontConfirmConversion, bReadOnly)
 
			fhLogFile.WriteLine("**********************************************************")
 
			'Schrijf de bestandsnaam weg in het logbestand.
			fhLogFile.WriteLine("Filename: " & strFilePath & file.Name)
			fhLogFile.WriteBlankLines(1)
 
			'Schrijf de bestandsnaam weg in het voortgangsbestand.
			fhCheckedFiles.WriteLine(strFilePath & file.Name)
 
			'Schrijf voor elke template in het logbestand...
			For Each objTemplate in objWord.Templates		
 
				'De volledige naam met Exists erachter als het bestand bestaat.
				If objFso.FileExists(objTemplate.FullName) Then
 
					fhLogFile.WriteLine("Template: " & objTemplate.FullName & ", Exists")
 
				Else
 
					'De volledige naam met Does Not Exist erachter als het bestand niet bestaat.
					fhLogFile.WriteLine("Template: " & objTemplate.FullName & ", Does Not Exist")
 
				End If
 
			Next		
 
			'Sluit het Word document.
			objDoc.Close
 
			fhLogFile.WriteBlankLines(1)
 
		End If
 
	End If
 
Next
 
'Stel de security weer in op de eerder opgehaalde instelling.
'Zie notitie bovenaan waarom onderstaande uitgecommentarieerd is.
'objWord.AutomationSecurity = lngAutomation
 
'Sluit het log- en het voortgangsbestand.
fhLogFile.Close()
fhCheckedFiles.Close()
 
'Sluit Word af.
objWord.Quit
 
'Cleanup
Set objDoc = Nothing
Set objWord = Nothing
Set fhLogFile = Nothing
Set WorkFolder = Nothing
Set objFso = Nothing

Bronnen:
MSDN Office Developer Centre - Office 2003 VBA Language Reference
MSDN Forums - MS Word: msoAutomationSecurityForceDisable generates "The macros in this project are disabled" message
Reading Word Documents in WSH
ActiveXperts - Microsoft Word Scripts
Microsoft Support - Het duurt lang om een Word-document te openen waaraan een sjabloon is gekoppeld

How to implement the Application.AutomationSecurity property in Office XP
Microsoft Support - The AutomationSecurity property behavior has changed in Office 2003
Using VBA to disable macros when opening files
VBA Code to disable a macro

microsoft/scripting/vbscript/scripts/whichtemplate.txt · Last modified: 2009/09/17 19:47 by bas

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki