Você quer automatizar o Word para criar novos documentos a partir de um modelo sem abrir, copiar e salvar manualmente cada vez. Macros VBA podem abrir um arquivo de modelo, adicionar conteúdo em marcadores ou controles de conteúdo específicos e salvar o resultado como um novo documento. Este artigo explica como escrever um macro VBA que gera um documento Word a partir de um modelo, incluindo como referenciar o modelo, inserir texto e lidar com caminhos de arquivo.
Principais Conclusões: Automatizando a Geração de Documentos com VBA
- Método Documents.Open com o caminho do modelo: Abre o arquivo .dotx ou .dotm como uma nova instância de documento.
- Objeto Bookmarks ou ContentControls: Segmenta pontos de inserção específicos no modelo para substituição dinâmica de texto.
- Método Document.SaveAs2: Salva o documento gerado como um arquivo .docx no local escolhido.
Como o VBA Interage com Modelos do Word
Um modelo do Word é um arquivo .dotx ou .dotm que contém estilos, cabeçalhos, rodapés e conteúdo de espaço reservado. Quando você abre um modelo via VBA, o Word cria um novo documento baseado nesse modelo sem alterar o arquivo original. Este é o mecanismo chave para a geração automatizada de documentos.
Os macros VBA são executados dentro do Word, então você precisa habilitar a guia Desenvolvedor para acessar o Editor do Visual Basic. O macro usa o método Documents.Open para carregar o modelo como um novo documento. Após abrir, você pode inserir texto, substituir marcadores ou preencher controles de conteúdo com dados de um banco de dados, Excel ou entrada do usuário. Finalmente, o macro chama SaveAs2 para gravar o novo arquivo em disco.
Antes de escrever o macro, crie um modelo que inclua marcadores ou controles de conteúdo em cada local onde você deseja inserir conteúdo dinâmico. Por exemplo, coloque um marcador chamado NomeCliente onde o nome do cliente deve aparecer. O macro localizará esse marcador e o substituirá pelo valor real.
Escrevendo o Macro VBA para Gerar um Documento a Partir de um Modelo
Este macro abre um modelo, preenche dois marcadores e salva o resultado como um novo documento. Você pode adaptar o código para usar controles de conteúdo ou lógica mais complexa.
- Abra o Editor do Visual Basic
Pressione Alt+F11 no Word. No Gerenciador de Projetos, clique duas vezes em ThisDocument ou insira um novo módulo no menu Inserir. - Declare variáveis e defina caminhos
Escreva o seguinte código no topo do módulo:Sub GerarDoModelo()
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim caminhoModelo As String
Dim caminhoSalvar As String
caminhoModelo = "C:\Modelos\ModeloFatura.dotx"
caminhoSalvar = "C:\Faturas\Fatura_" & Format(Now, "yyyymmdd_hhnnss") & ".docx" - Abra o modelo como um novo documento
Adicione esta linha:Set wdDoc = Documents.Open(caminhoModelo)
Isso cria um novo documento baseado no modelo. - Insira texto em um marcador
Substitua o conteúdo do marcador por texto dinâmico:With wdDoc.Bookmarks("NomeCliente")
.Range.Text = "Acme Corporation"
End With
Repita para cada marcador em seu modelo. - Salve o novo documento
Adicione:wdDoc.SaveAs2 caminhoSalvar
wdDoc.Close - Limpe as referências de objeto
Finalize o macro com:Set wdDoc = Nothing
Set wdApp = Nothing
End Sub
Execute o macro pressionando F5 enquanto estiver no editor ou atribuindo-o a um botão na Barra de Ferramentas de Acesso Rápido. O novo documento aparece no caminho de salvamento especificado.
Problemas Comuns ao Gerar Documentos com VBA
O macro para com a mensagem “O item com o nome especificado não foi encontrado”
Esse erro ocorre quando o nome de um marcador ou controle de conteúdo no código não corresponde ao modelo. Abra o modelo, pressione Ctrl+G para abrir a janela Imediato e digite ActiveDocument.Bookmarks.ShowAll = True para exibir todos os colchetes de marcadores. Verifique a ortografia exata e a capitalização de cada nome. Controles de conteúdo exigem o uso de wdDoc.ContentControls em vez de Bookmarks.
O caminho do arquivo do modelo não foi encontrado
O Word não consegue localizar o modelo se a string do caminho estiver digitada incorretamente ou se o arquivo foi movido. Use um caminho absoluto como C:\Modelos\MeuModelo.dotx. Para portabilidade, armazene o caminho em uma célula de uma pasta de trabalho do Excel ou em uma variável de ambiente do Windows e leia-o com VBA.
O documento salvo ainda mostra o conteúdo do modelo em vez dos novos valores
Isso acontece se o macro for executado antes do modelo carregar completamente. Insira um pequeno atraso após Documents.Open usando Application.Wait (Now + TimeValue("0:00:01")). Alternativamente, use DoEvents para forçar o Word a processar operações pendentes antes de inserir texto.
O macro VBA está desabilitado ou bloqueado
O Word bloqueia macros de locais não confiáveis por padrão. Salve o arquivo .dotm ou o documento que contém o macro em uma pasta confiável. Vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Locais Confiáveis e adicione sua pasta de projeto. Alternativamente, assine digitalmente o projeto de macro.
Geração com VBA vs Criação Manual
| Item | Macro VBA | Processo Manual |
|---|---|---|
| Tempo de configuração | 15–30 minutos para escrever e testar o macro | Nenhum |
| Velocidade por documento | Menos de 2 segundos | 1–3 minutos dependendo do conteúdo |
| Taxa de erro | Próximo de zero se os marcadores estiverem corretos | Propenso a erros de digitação e campos perdidos |
| Repetibilidade | Saída idêntica a cada execução | Varia com cada operador |
| Habilidade necessária | Conhecimento básico de VBA | Nenhuma programação necessária |
A automação com VBA é ideal quando você gera o mesmo tipo de documento com frequência. A criação manual funciona para documentos únicos onde o tempo de configuração não se justifica.
Agora você pode escrever um macro VBA que abre um modelo do Word, preenche marcadores ou controles de conteúdo e salva um novo documento. Comece criando um modelo com marcadores nomeados para cada campo necessário. Teste o macro em uma cópia do modelo para verificar a saída. Para uso avançado, integre o macro com dados do Excel ou um banco de dados para preencher vários campos em uma única execução.