Você quer que uma macro VBA personalizada seja executada automaticamente toda vez que salvar um documento do Word. O Word não expõe uma configuração direta para executar uma macro ao salvar, mas oferece um evento interno chamado DocumentBeforeSave que você pode usar. Este artigo explica como escrever e anexar uma macro ao evento DocumentBeforeSave para que seu código seja executado antes da conclusão da operação de salvamento. Você aprenderá as etapas exatas para criar a macro, testá-la e lidar com problemas comuns, como segurança de macro e várias janelas de documento.
Principais conclusões: Automatizar uma macro ao salvar o documento
- Evento DocumentBeforeSave no módulo ThisDocument: Aciona seu código de macro antes de qualquer ação de salvamento naquele documento específico.
- Proteção por senha do projeto VBA: Impede que usuários não autorizados visualizem ou alterem a macro automática.
- Arquivo > Opções > Central de Confiabilidade > Configurações de Macro > Habilitar todas as macros: Necessário para permitir que o evento DocumentBeforeSave seja executado.
Entendendo o evento DocumentBeforeSave no VBA do Word
O VBA do Word fornece procedimentos de evento que são acionados quando ações específicas ocorrem. O evento DocumentBeforeSave é executado automaticamente sempre que você salva o documento, seja usando Ctrl+S, clicando no ícone Salvar ou fechando o documento e escolhendo salvar as alterações. Este evento pertence ao objeto Application, mas você também pode tratá-lo no nível do documento usando o módulo de classe ThisDocument.
O evento passa um argumento: SaveAsUI, um booleano que informa se o Word está mostrando a caixa de diálogo Salvar como. Você pode verificar esse valor dentro da sua macro para decidir se deve executar determinado código apenas durante uma operação completa de Salvar como.
Antes de escrever a macro, certifique-se de ter acesso à guia Desenvolvedor. Se a guia Desenvolvedor não estiver visível, vá em Arquivo > Opções > Personalizar Faixa de Opções e marque a caixa Desenvolvedor no painel direito. Você também precisa permitir a execução de macros nas configurações da Central de Confiabilidade. Vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro e selecione Habilitar todas as macros. Para macros assinadas, você pode escolher Desabilitar todas as macros, exceto as assinadas digitalmente.
Onde colocar a macro de evento
Você deve colocar a macro DocumentBeforeSave dentro do objeto ThisDocument do documento específico. Não a coloque em um módulo padrão. O módulo ThisDocument está visível no Explorador de Projetos em Objetos do Microsoft Word. Clique duas vezes em ThisDocument para abrir sua janela de código.
Etapas para criar e testar uma macro que é executada ao salvar o documento
Siga estas etapas para adicionar uma macro que exibe uma caixa de mensagem antes de cada salvamento. Você pode substituir o código da caixa de mensagem pela sua própria lógica, como atualizar um carimbo de data/hora, fazer backup do arquivo ou validar o conteúdo.
- Abra o Editor VBA
Pressione Alt+F11 para abrir o editor do Visual Basic for Applications. Se o Explorador de Projetos não estiver visível, pressione Ctrl+R para exibi-lo. - Localize o módulo ThisDocument
No Explorador de Projetos, expanda o projeto que corresponde ao seu documento. Geralmente aparece como Projeto (NomeDoDocumento). Em Objetos do Microsoft Word, clique duas vezes em ThisDocument. - Escolha o evento Document no menu suspenso
Na parte superior da janela de código, clique no menu suspenso esquerdo e selecione Document. O menu suspenso direito mostra automaticamente (Declarações). Clique no menu suspenso direito e selecione DocumentBeforeSave. O editor VBA insere o esboço do procedimento de evento com End Sub. - Escreva seu código de macro dentro do procedimento de evento
Entre Private Sub DocumentBeforeSave(ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean) e End Sub, adicione seu código. Por exemplo:MsgBox "Salvando o documento agora. SaveAsUI = " & SaveAsUI - Teste a macro
Feche o editor VBA. Salve o documento pressionando Ctrl+S. Uma caixa de mensagem deve aparecer antes que o Word conclua o salvamento. Clique em OK para permitir que o salvamento termine. - Salve o documento como um arquivo habilitado para macro
Vá em Arquivo > Salvar como. No menu suspenso Tipo de salvamento, selecione Documento Habilitado para Macro do Word (docm). Se você salvar como .docx, a macro e o procedimento de evento serão descartados.
Usando o argumento Cancel para interromper um salvamento
O evento DocumentBeforeSave inclui um parâmetro Cancel. Se você definir Cancel = True dentro do procedimento, o Word cancela a operação de salvamento. Isso é útil para validação: se certas condições não forem atendidas, você pode impedir que o documento seja salvo. Por exemplo:
Private Sub DocumentBeforeSave(ByVal SaveAsUI As Boolean, ByRef Cancel As Boolean)
If Len(ActiveDocument.BuiltInDocumentProperties("Title")) = 0 Then
MsgBox "Você deve definir um título para o documento antes de salvar."
Cancel = True
End If
End Sub
Quando Cancel é True, o Word não salva o documento. O usuário deve corrigir o problema e salvar novamente.
Problemas comuns ao executar uma macro ao salvar o documento
A macro não é executada quando salvo
A causa mais comum são as configurações de segurança de macro. Vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro e selecione Habilitar todas as macros. Verifique também se o documento foi salvo como um arquivo .docm. Se a extensão do arquivo for .docx, o projeto VBA é removido e o evento nunca é acionado.
Outra causa é colocar o código em um módulo padrão em vez do módulo ThisDocument. Apenas o módulo ThisDocument pode hospedar procedimentos de evento em nível de documento. Mova o código para ThisDocument e exclua a duplicata no módulo padrão.
A macro é executada para todos os documentos abertos
Se você colocou o evento DocumentBeforeSave no modelo Normal.dotm, a macro será executada para todos os documentos que usam esse modelo. Para restringir a macro a um documento, coloque o código apenas no módulo ThisDocument desse documento. Evite editar o Normal.dotm, a menos que você pretenda que o comportamento seja global.
A macro para de funcionar depois de fechar e reabrir o documento
Isso acontece quando o documento foi salvo como um arquivo .docx. Salve novamente o documento como um Documento Habilitado para Macro do Word (.docm). O procedimento de evento é preservado apenas em arquivos habilitados para macro. Verifique também se o projeto VBA não está corrompido. Abra o editor VBA, clique com o botão direito no projeto e selecione Propriedades do VBAProject. Na guia Proteção, certifique-se de que Bloquear projeto para exibição esteja desmarcado se você quiser editar o código posteriormente.
Evento DocumentBeforeSave vs outros eventos relacionados a salvamento
| Item | DocumentBeforeSave | DocumentSave |
|---|---|---|
| Quando é acionado | Antes do início da operação de salvamento | Após a conclusão da operação de salvamento |
| Pode cancelar o salvamento | Sim, definindo Cancel = True | Não, o salvamento já foi concluído |
| Localização no VBA | Módulo ThisDocument, objeto Application ou Document | Módulo ThisDocument, apenas objeto Document |
| Caso de uso | Validação, registro ou backup antes de salvar | Atualizar metadados ou acionar ações após o arquivo ser gravado |
Se você precisar executar código após o salvamento ser concluído, use o evento DocumentSave. Esse evento não possui um parâmetro Cancel porque o salvamento já está completo. Ambos os eventos devem ser colocados no módulo ThisDocument do documento específico.
Agora você pode agendar qualquer macro VBA para ser executada automaticamente ao salvar um documento do Word. Comece escrevendo uma macro de teste simples no evento DocumentBeforeSave do documento de destino. Após verificar que funciona, substitua o código de teste pela sua lógica de automação real. Para evitar alterações acidentais, proteja o projeto VBA com uma senha através de Ferramentas > Propriedades do VBAProject > Proteção > Bloquear projeto para exibição.