Você tem um documento do Word que precisa dos estilos, cabeçalhos ou macros de um modelo específico. Anexar manualmente um modelo a cada arquivo leva tempo quando você trabalha com muitos documentos. O VBA automatiza essa tarefa executando uma macro curta que aplica um modelo a um ou a todos os documentos abertos. Este artigo explica como escrever e executar uma macro VBA para anexar um modelo do Word a um documento. Você aprenderá o código exato, como modificá-lo para o caminho do seu modelo e o que verificar se a macro não funcionar como esperado.
Principais Conclusões: Aplicar um Modelo do Word com VBA
- ActiveDocument.AttachedTemplate = “C:\caminho\modelo.dotx”: Esta única linha de código VBA anexa um modelo ao documento ativo no momento.
- Loop For Each Doc In Application.Documents: Use este loop para aplicar um modelo a todos os documentos abertos de uma vez, em vez de executar a macro repetidamente.
- Application.ScreenUpdating = False antes do loop: Desative a atualização de tela para acelerar a macro ao processar muitos arquivos e evitar cintilação.
O que o VBA Faz ao Anexar um Modelo a um Documento
VBA é a linguagem de programação integrada ao Word. Quando você anexa um modelo usando VBA, altera a propriedade AttachedTemplate de um objeto Document. Essa propriedade aceita um caminho de arquivo completo para um arquivo .dotm, .dotx ou .dot. O modelo fornece estilos, entradas de AutoTexto, atalhos de teclado e macros ao documento. O documento em si não se move nem altera sua formatação imediatamente, a menos que você também execute um comando separado para atualizar os estilos do modelo.
Antes de escrever a macro, você precisa de duas coisas. Primeiro, saiba o caminho exato do arquivo do modelo. Por exemplo, C:\Users\SeuNome\AppData\Roaming\Microsoft\Templates\MinhaEmpresa.dotx. Segundo, habilite a guia Desenvolvedor no Word para poder abrir o editor VBA. Vá em Arquivo > Opções > Personalizar Faixa de Opções e marque a caixa Desenvolvedor na coluna da direita.
As macros VBA são armazenadas em um módulo dentro do modelo Normal.dotm ou dentro do documento atual. Para esta tarefa, armazene a macro no Normal.dotm para que fique disponível para todos os documentos.
Passos para Escrever e Executar a Macro VBA para Anexar um Modelo
- Abra o editor VBA
Pressione Alt + F11 no teclado. A janela Microsoft Visual Basic for Applications é aberta. Se você não vir o painel Project Explorer à esquerda, pressione Ctrl + R para exibi-lo. - Insira um novo módulo
No Project Explorer, clique com o botão direito em Normal e escolha Inserir > Módulo. Uma janela de código em branco é aberta. É aqui que você cola o código da macro. - Cole o código da macro
Copie o seguinte código VBA e cole na janela do módulo:Sub ApplyTemplateToActiveDoc()
Dim templatePath As String
templatePath = "C:\Users\SeuNome\AppData\Roaming\Microsoft\Templates\MinhaEmpresa.dotx"
ActiveDocument.AttachedTemplate = templatePath
MsgBox "Modelo aplicado a " & ActiveDocument.Name
End Sub
Substitua o caminho do arquivo no código pelo caminho real do seu modelo. Mantenha as barras invertidas duplas. Por exemplo, se seu modelo estiver emD:\Modelos\Carta.dotx, altere a linha paratemplatePath = "D:\Modelos\Carta.dotx". - Execute a macro no documento ativo
Feche o editor VBA clicando no X no canto superior direito. De volta ao Word, pressione Alt + F8 para abrir a caixa de diálogo Macros. Selecione ApplyTemplateToActiveDoc na lista e clique em Executar. O Word anexa o modelo e mostra uma mensagem de confirmação. - Opcional: Atualizar estilos do novo modelo
Anexar o modelo não atualiza automaticamente os estilos do documento. Para copiar os estilos do modelo para o documento, adicione esta linha antes da linha End Sub:ActiveDocument.UpdateStyles
Esta linha substitui todos os estilos no documento pelas definições do modelo anexado.
Aplicar o Modelo a Todos os Documentos Abertos de Uma Vez
- Crie uma nova macro para vários documentos
Abra o editor VBA novamente (Alt + F11). Insira outro módulo ou adicione código abaixo da macro existente. Cole este código:Sub ApplyTemplateToAllDocs()
Dim doc As Document
Dim templatePath As String
templatePath = "C:\Users\SeuNome\AppData\Roaming\Microsoft\Templates\MinhaEmpresa.dotx"
Application.ScreenUpdating = False
For Each doc In Application.Documents
doc.AttachedTemplate = templatePath
doc.UpdateStyles
Next doc
Application.ScreenUpdating = True
MsgBox "Modelo aplicado a todos os documentos abertos"
End Sub - Execute a macro
Pressione Alt + F8, selecione ApplyTemplateToAllDocs e clique em Executar. A macro processa todos os documentos abertos. A atualização de tela é desativada durante o loop para melhorar a velocidade e reduzir o flicker visual.
O que Verificar se a Macro Não Funcionar
A macro é executada, mas nada muda no documento
A causa mais comum é a falta da linha ActiveDocument.UpdateStyles. Sem ela, apenas o link do modelo é alterado. O documento ainda usa seus estilos antigos. Adicione a linha UpdateStyles conforme mostrado no passo 5 acima.
O Word mostra um erro: “Erro em tempo de execução 4198”
Este erro significa que o Word não consegue encontrar o arquivo de modelo no caminho fornecido. Verifique o caminho novamente. Abra o File Explorer, navegue até o local do modelo e copie o caminho exato da barra de endereços. Cole no código VBA. Certifique-se de que a extensão do arquivo corresponda: .dotm para modelos habilitados para macro, .dotx para modelos sem macros ou .dot para modelos mais antigos do Word.
A macro funciona, mas os estilos são atualizados incorretamente
O método UpdateStyles substitui todos os estilos no documento pelos do modelo. Se o documento tinha estilos personalizados que não existem no modelo, esses estilos são removidos. Para manter os estilos existentes, não use UpdateStyles. Em vez disso, atualize manualmente apenas estilos específicos usando a caixa de diálogo Organizador ou copiando estilos um a um em VBA com o método Copy.
Quero aplicar o modelo a um documento sem abri-lo
Você pode abrir um documento em segundo plano, anexar o modelo, salvar e fechá-lo. Use a seguinte estrutura de código. Substitua o caminho do arquivo pelo caminho do seu documento e do modelo.
Sub ApplyTemplateToClosedDoc()
Dim doc As Document
Dim docPath As String
Dim templatePath As String
docPath = "C:\Docs\Relatorio.docx"
templatePath = "C:\Modelos\ModeloRelatorio.dotx"
Set doc = Documents.Open(docPath, Visible:=False)
doc.AttachedTemplate = templatePath
doc.UpdateStyles
doc.Save
doc.Close
End Sub
| Item | Apenas Documento Ativo | Todos os Documentos Abertos |
|---|---|---|
| Objeto VBA | ActiveDocument | Coleção Application.Documents |
| Loop necessário | Não | Sim, For Each doc In Application.Documents |
| Atualização de tela desativada | Opcional | Recomendado para velocidade |
| UpdateStyles necessário | Sim, se os estilos precisarem mudar | Sim, se os estilos precisarem mudar |
| Risco de sobrescrever estilos personalizados | Mesmo que qualquer alteração de modelo | Mesmo que qualquer alteração de modelo |
Agora você pode escrever e executar uma macro VBA para anexar um modelo a um ou vários documentos do Word. Comece com a macro de documento único em um arquivo de teste para verificar o caminho do modelo. Em seguida, use o loop de vários documentos quando precisar processar um lote de arquivos. Para automação avançada, combine esta macro com uma caixa de diálogo de arquivo que permite escolher um modelo em tempo de execução usando o objeto Application.FileDialog.