Batch malendringer

May 31  by Eliza

Maler brukes til raskt å definere en standard utseende for et dokument eller en gruppe av dokumenter. Den fantastiske tingen om maler er at du kan definere en mal for å gi dokumentet en titt, og en annen mal for å gi den et helt annet utseende. Alt du trenger å gjøre, selvfølgelig, er å endre hvilken mal er assosiert med et dokument.

Endring av malen forbundet med en eller to dokumenter er ganske lett. Hva hvis du har en katalog full av dokumenter der maler må endres? Dette kan bli ganske kjedelig svært raskt. Det er der en makro kan komme til unnsetning-å avlaste den gamle tedium og gjøre den kjedelige veldig raskt. Følgende makro, ChangeTemplates, modifiserer alle dokumentene i en bestemt katalog for å sørge for at de bruker den malen du vil.

Sub ChangeTemplates ()
Dim strDocPath As String
Dim strTemplateB As String
Dim strCurDoc As String
Dim docCurDoc Som Document

'dokumentmappe satt banen og mal strenger
strDocPath = "C: \ bane å dokumentere mappe \"
strTemplateB = "C: \ sti til mal \ templateB.dot"

"Komme først doc - eneste gangen må gi filen spec
strCurDoc = Dir (strDocPath & "* .doc")

'Klar til å sløyfe (så lenge fil funnet)
Gjør Mens strCurDoc <> ""
'Åpen fil
Satt docCurDoc = Documents.Open (Filename: = strDocPath & strCurDoc)
'Endre malen
docCurDoc.AttachedTemplate = strTemplateB
'Lagre og lukke
docCurDoc.Close wdSaveChanges
"Komme neste filnavn
strCurDoc = Dir
Loop
MsgBox "Ferdig"
End Sub

For å kunne bruke makroen, rett og slett sørge for at strDocPath og strTemplateB variablene er satt riktig. Makroen endrer malen foreninger for alle dokumenter i en bestemt katalog. Hvis du vil ha noe litt mer kresne, deretter en annen makro er i orden. For eksempel, kan det være lurt å ha makro undersøke hvert dokument og bare endre de som bruker TemplateA slik at de nå bruker TemplateB. I dette tilfellet vil du finne følgende makro veldig hendig:

Sub TemplateBatchChange ()
Dim objPropertyReader
Dim strFolder As String
Dim strFileName As String
Dim objThisDoc Som Word.Document
Dim strFindTemplate As String
Dim strReplaceTemplate As String
Dim strAffectedDocs As String

On Error Resume Next

'Opprett PropertyReader objekt
Satt objPropertyReader = Create ("DSOleFile.PropertyReader")
Hvis err.number <> 0 Then
MsgBox "Du må installere DSOleFile komponent. Se" & _
"Http://support.microsoft.com/kb/224351"
GoTo FinishUp
End If

'Få malnavn
strFindTemplate = UCase (InputBox ("Navn på mal for å finne (utelukke DOT)") & _
".dot")

strReplaceTemplate = InputBox ("Navn på erstatning mal (utelukke DOT)") & _
".dot"

"Pass på at det er en gyldig mal. Prøv å lage et nytt dokument basert på den.
Satt objThisDoc = Word.Documents.Add (strReplaceTemplate, Synlig: = False)
Hvis err.number <> 0 Then
'Ingen slik mal
MsgBox "Det er ingen tilgjengelig mal som heter" & strReplaceTemplate
GoTo FinishUp
End If
«Lukk testdokumentet
objThisDoc.Close wdDoNotSaveChanges

On Error GoTo Errorhandler
"Få den nåværende dokumenter banen
strFolder = Word.Application.Options.DefaultFilePath (wdDocumentsPath) _
& Word.Application.PathSeparator

'Undersøk alle Word-dokumenter i katalogen

"Få den første dokumentnavn
strFileName = Dir (strFolder & "* .doc")

Mens strFileName <> ""
«Se på navn malen
Hvis UCase (objPropertyReader.GetDocumentProperties _
(StrFolder & strFileName) .Template) = strFindTemplate Deretter

'Det matcher. Åpne dokumentet
Satt objThisDoc = Word.Documents.Open _
(Filename: = strFileName, Synlig: = False)

'Endre vedlagte mal
objThisDoc.AttachedTemplate = strReplaceTemplate

Lagre endringen
objThisDoc.Close wdSaveChanges

"Legg merke til dokumentet
strAffectedDocs = strAffectedDocs & strFileName & ","
End If
«Få det neste dokumentet
strFileName = Dir
Wend

'Rapportere resultatene
Hvis strAffectedDocs = "" Then
MsgBox "Ingen dokumenter ble endret.", "Mal Batch Change"
Else
«Fjern den etterfølgende komma og plass
strAffectedDocs = Venstre (strAffectedDocs, Len (strAffectedDocs) - 2)

MsgBox "Disse dokumentene ble endret:" & _
strAffectedDocs, "Mal Batch Change"
End If
GoTo FinishUp

Errorhandler:
Satt objThisDoc = Nothing
Satt objPropertyReader = Nothing
Err.Raise vbError + 1001, "TemplateBatchChange", _
"TemplateBatchChange oppstått en feil:" & Err.Description

FinishUp:
'versjons objekt referanser
Satt objThisDoc = Nothing
Satt objPropertyReader = Nothing
End Sub

For å kunne bruke denne makroen, må du først sørge for at DSOLEFILE komponent (tilgjengelig gratis fra Microsoft) er installert på systemet ditt. Du kan finne ut mer om denne komponenten ved å henvise til Microsofts 224351 Knowledge Base-artikkelen. Makroen gir deg en sjanse til å angi en mal navn som skal erstattes, og navnet på malen for å erstatte den med. Den sjekker selv å sørge for at den nye malen eksisterer.

Denne makroen søker etter dokumenter i standarddokumentmappe Word. Hvis du ønsker å søke i et annet direkte, bør du sørge for at strFolder variabelen blir satt til den fullstendige banen til mappen du ønsker brukt.

WordTips er din kilde for kostnadseffektiv Microsoft Word trening. (Microsoft Word er den mest populære tekstbehandlingsprogrammet i verden.) Dette tipset (1437) gjelder for Microsoft Word 97, 2000, 2002, og 2003. Du kan finne en versjon av dette tipset for Båndet av Word (Word 2007 og senere) her: Batch malendringer.