I modelli vengono utilizzati per definire rapidamente un aspetto standard per un documento o un gruppo di documenti. La cosa meravigliosa dei modelli è che puoi definire un modello per dare al tuo documento un aspetto e un altro modello per dargli un aspetto completamente diverso. Tutto quello che devi fare, ovviamente, è cambiare il modello associato a un documento.

Modificare il modello associato a uno o due documenti è abbastanza semplice. Cosa succede se hai una directory piena di documenti i cui modelli devono essere modificati? Questo può diventare abbastanza noioso molto rapidamente. È qui che una macro può venire in soccorso, per alleviare quel vecchio tedio e fare il banale molto rapidamente. La seguente macro, ChangeTemplates, modifica tutti i documenti in una determinata directory per assicurarsi che utilizzino il modello desiderato.

Sub ChangeTemplates()

Dim strDocPath As String     Dim strTemplateB As String     Dim strCurDoc As String     Dim docCurDoc As Document

' set document folder path and template strings     strDocPath = "C:\path to document folder\"

strTemplateB = "C:\path to template\templateB.dotx"



' get first doc - only time need to provide file spec     strCurDoc = Dir(strDocPath & "*.doc?")



' ready to loop (for as long as file found)

Do While strCurDoc <> ""

' open file         Set docCurDoc = Documents.Open(FileName:=strDocPath & strCurDoc)

' change the template         docCurDoc.AttachedTemplate = strTemplateB         ' save and close         docCurDoc.Close wdSaveChanges         ' get next file name         strCurDoc = Dir     Loop     MsgBox "Finished"

End Sub

Per utilizzare la macro, assicurati semplicemente che le variabili strDocPath e strTemplateB siano impostate correttamente. La macro modifica le associazioni dei modelli per tutti i documenti in una determinata directory. Se vuoi qualcosa di un po ‘più discriminante, è necessaria una macro diversa. Ad esempio, potresti voler fare in modo che la macro esamini ogni documento e modifichi solo quelli che utilizzano TemplateA in modo che ora utilizzino TemplateB. In questo caso troverai molto utile la seguente macro:

Sub TemplateBatchChange()

Dim objPropertyReader     Dim strFolder As String     Dim strFileName As String     Dim objThisDoc As Word.Document     Dim strFindTemplate As String     Dim strReplaceTemplate As String     Dim strAffectedDocs As String

On Error Resume Next

'Create the PropertyReader object     Set objPropertyReader = CreateObject("DSOleFile.PropertyReader")

If Err.Number <> 0 Then         MsgBox "You must install the DSOleFile component. See " & _           "http://support.microsoft.com/?kbid=224351"

GoTo FinishUp     End If

'Get the template names     strFindTemplate = UCase(InputBox("Name of template to find"))

7     strReplaceTemplate = InputBox("Name of replacement template")



'Make sure it's a valid template. Try to create a new document based on it.

Set objThisDoc = Word.Documents.Add(strReplaceTemplate, Visible:=False)

If Err.Number <> 0 Then         'No such template         MsgBox "There is no accessible template named " & strReplaceTemplate         GoTo FinishUp     End If     'Close the test document     objThisDoc.Close wdDoNotSaveChanges

On Error GoTo ErrorHandler     'Get the current documents path     strFolder = Word.Application.Options.DefaultFilePath(wdDocumentsPath) _       & Word.Application.PathSeparator

'Examine all Word documents in the directory

'Get the first document name     strFileName = Dir(strFolder & "*.doc?")



While strFileName <> ""

'Look at the template name         If UCase(objPropertyReader.GetDocumentProperties _           (strFolder & strFileName).Template) = strFindTemplate Then

'It matches. Open the document             Set objThisDoc = Word.Documents.Open _               (FileName:=strFileName, Visible:=False)



'Change the attached template             objThisDoc.AttachedTemplate = strReplaceTemplate

'Save the change             objThisDoc.Close wdSaveChanges

'Note the document             strAffectedDocs = strAffectedDocs & strFileName & ", "

End If         'Get the next document         strFileName = Dir     Wend

'Report the results     If strAffectedDocs = "" Then         MsgBox "No documents were changed.", , "Template Batch Change"

Else         'Remove the trailing comma and space         strAffectedDocs = Left(strAffectedDocs, Len(strAffectedDocs) - 2)



MsgBox "These documents were changed: " & _           strAffectedDocs, , "Template Batch Change"

End If     GoTo FinishUp

ErrorHandler:

Set objThisDoc = Nothing     Set objPropertyReader = Nothing     Err.Raise vbError + 1001, "TemplateBatchChange", _       "TemplateBatchChange encountered an error: " & Err.Description

FinishUp:

'Release object references     Set objThisDoc = Nothing     Set objPropertyReader = Nothing End Sub

Per utilizzare questa macro, devi prima assicurarti che il componente DSOLEFILE (disponibile gratuitamente da Microsoft) sia installato sul tuo sistema.

Puoi trovare ulteriori informazioni su questo componente facendo riferimento all’articolo 224351 della Knowledge Base di Microsoft. La macro offre la possibilità di specificare un nome di modello da sostituire e il nome del modello con cui sostituirlo. Controlla anche per assicurarsi che il modello sostitutivo esista.

Questa macro cerca i documenti nella cartella di documenti di Word predefinita.

Se vuoi cercare direttamente in un altro, dovresti assicurarti che la variabile strFolder sia impostata sul percorso completo della cartella che desideri utilizzare.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti WordTips), ho preparato una pagina speciale che include informazioni utili.

WordTips è la tua fonte di formazione economica su Microsoft Word.

(Microsoft Word è il software di elaborazione testi più popolare al mondo.) Questo suggerimento (10338) si applica a Microsoft Word 2007, 2010, 2013 e 2016. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Word qui: Batch Template Changes.