Las plantillas se utilizan para definir rápidamente un aspecto estándar para un documento o un grupo de documentos. Lo maravilloso de las plantillas es que puede definir una plantilla para darle a su documento un aspecto y otra plantilla para darle un aspecto completamente diferente. Todo lo que necesita hacer, por supuesto, es cambiar qué plantilla está asociada con un documento.

Cambiar la plantilla asociada a uno o dos documentos es bastante sencillo. ¿Qué sucede si tiene un directorio lleno de documentos cuyas plantillas deben cambiarse? Esto puede volverse bastante tedioso muy rápidamente. Aquí es donde una macro puede venir al rescate, para aliviar ese viejo tedio y hacer lo mundano muy rápidamente. La siguiente macro, ChangeTemplates, modifica todos los documentos en un directorio en particular para asegurarse de que usen la plantilla que desea.

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

Para usar la macro, simplemente asegúrese de que las variables strDocPath y strTemplateB estén configuradas correctamente. La macro cambia las asociaciones de plantilla para todos los documentos en un directorio particular. Si desea algo un poco más discriminatorio, entonces una macro diferente está en orden. Por ejemplo, es posible que desee que la macro examine cada documento y solo cambie los que usan TemplateA para que ahora usen TemplateB. En este caso, encontrará la siguiente macro muy útil:

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

Para utilizar esta macro, primero debe asegurarse de que el componente DSOLEFILE (disponible gratis de Microsoft) esté instalado en su sistema.

Puede obtener más información sobre este componente consultando el artículo de la base de conocimientos 224351 de Microsoft. La macro le brinda la oportunidad de especificar un nombre de plantilla que se reemplazará y el nombre de la plantilla con la que se reemplazará. Incluso verifica para asegurarse de que exista la plantilla de reemplazo.

Esta macro busca documentos en la carpeta de documentos de Word predeterminada.

Si desea buscar directamente en una forma diferente, debe asegurarse de que la variable strFolder se establezca en la ruta completa de la carpeta que desea usar.

_Nota: _

Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios WordTips), he preparado una página especial que incluye información útil.

link: / wordribbon-WordTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador].

WordTips es su fuente de formación rentable en Microsoft Word.

(Microsoft Word es el software de procesamiento de texto más popular del mundo). Este consejo (10338) se aplica a Microsoft Word 2007, 2010, 2013 y 2016. Puede encontrar una versión de este consejo para la interfaz de menú anterior de Word aquí: link: / word-Batch_Template_Changes [Cambios en la plantilla por lotes].