Ao executar uma mala direta no Word, a saída padrão é um único documento com uma página por registro. Salvar cada registro como um arquivo separado com um padrão de nome personalizado — como “Invoice_12345_JohnDoe.docx” — exige algumas etapas extras. O Word não oferece uma caixa de diálogo nativa para nomear arquivos mesclados automaticamente. Este artigo explica como usar uma macro VBA para salvar cada registro mesclado com um nome de arquivo que combina texto fixo e valores de campos da sua fonte de dados.
Principais Conclusões: Salvando a Saída da Mala Direta com Nomes Personalizados
- Alt+F11 para abrir o editor VBA: Acesse o ambiente de macros onde você escreverá o código de automação de nomes de arquivos.
- MailMerge.DataSource.DataFields(“NomeDoCampo”).Value: Sintaxe VBA para recuperar o valor de um campo específico do registro de mesclagem atual para uso no nome do arquivo.
- ActiveDocument.SaveAs2 FileName:=caminho & nome_arquivo: Comando que salva o registro atual como um novo documento com o nome personalizado.
Como o Word Lida com a Saída da Mala Direta
Por padrão, o recurso de mala direta do Word gera todos os registros em um único documento contínuo. Cada registro começa em uma nova página ou quebra de seção. Esse documento único é adequado para impressão ou envio por e-mail em lote, mas não cria arquivos individuais. Para salvar cada registro como um arquivo separado com um padrão de nome personalizado — por exemplo, combinando um ID de registro com um nome — você precisa automatizar o processo com uma macro. A macro percorre cada registro, extrai valores de campos, monta uma string de nome de arquivo e salva o registro atual usando o método SaveAs2. Antes de escrever a macro, você deve concluir a configuração da mala direta: conectar-se à fonte de dados, inserir campos de mesclagem no documento principal e visualizar os resultados para confirmar que os campos aparecem corretamente.
Pré-requisitos para a Macro
Antes de executar a macro, confirme os seguintes itens:
- Sua fonte de dados (planilha do Excel, banco de dados do Access, contatos do Outlook ou outro) está conectada ao documento principal.
- Os campos de mesclagem estão inseridos no documento onde você deseja que os componentes do nome do arquivo apareçam.
- Você conhece os nomes exatos dos campos que usará no padrão de nome. Os nomes dos campos diferenciam maiúsculas de minúsculas no VBA.
- Você tem uma pasta de destino onde os novos arquivos serão salvos. Crie a pasta se ela não existir.
- As configurações de segurança de macro permitem executar código VBA. Defina como Habilitar todas as macros temporariamente ou assine digitalmente sua macro.
Etapas para Criar e Executar a Macro de Nome Personalizado
Siga estas etapas para escrever uma macro que salva cada registro de mala direta com um padrão de nome personalizado.
- Abra o editor VBA
Pressione Alt+F11 no Word para abrir o editor Visual Basic for Applications. Se o editor abrir mas nenhum projeto estiver visível, expanda Normal ou Project (MailMergeDocument) no painel esquerdo. - Insira um novo módulo
No editor VBA, clique em Insert na barra de menus e selecione Module. Uma janela de código em branco aparece. - Escreva o código da macro
Copie e cole o código a seguir na janela do módulo. Substitua os valores de espaço reservado pelo seu próprio caminho de pasta e nomes de campos.Sub SaveMergeWithCustomFilename() Dim MainDoc As Document Dim i As Integer Dim FolderPath As String Dim FileName As String Dim FieldValue1 As String Dim FieldValue2 As String ' Defina a pasta de destino — altere este caminho FolderPath = "C:\MailMergeOutput\" ' Garanta que o caminho da pasta termine com barra invertida If Right(FolderPath, 1) <> "\" Then FolderPath = FolderPath & "\" End If Set MainDoc = ActiveDocument With MainDoc.MailMerge .Destination = wdSendToNewDocument .SuppressBlankLines = True For i = 1 To .DataSource.RecordCount .DataSource.FirstRecord = i .DataSource.LastRecord = i ' Executa a mesclagem para o registro único .Execute Pause:=False ' Obtém valores dos campos para o nome do arquivo FieldValue1 = .DataSource.DataFields("CustomerID").Value FieldValue2 = .DataSource.DataFields("LastName").Value ' Monta o nome do arquivo — ajuste o padrão conforme necessário FileName = "Invoice_" & FieldValue1 & "_" & FieldValue2 & ".docx" ' Salva o documento resultante ActiveDocument.SaveAs2 FileName:=FolderPath & FileName ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges Next i End With Set MainDoc = Nothing MsgBox "Mesclagem concluída. Arquivos salvos em " & FolderPath End Sub - Ajuste os nomes dos campos e o padrão de nome
No código, altere CustomerID e LastName para corresponder aos nomes reais dos campos em sua fonte de dados. Modifique a linha FileName para corresponder ao padrão desejado. Por exemplo,"Letter_" & FieldValue1 & "_" & FieldValue2 & ".docx"produz nomes como Letter_102_Smith.docx. - Execute a macro
Feche o editor VBA e retorne ao Word. Pressione Alt+F8 para abrir a caixa de diálogo Macros. Selecione SaveMergeWithCustomFilename na lista e clique em Executar. O Word processa cada registro e salva arquivos individuais na pasta especificada. - Verifique os arquivos de saída
Abra a pasta de destino. Confirme se cada arquivo existe e se os nomes correspondem ao seu padrão. Abra alguns arquivos para verificar se o conteúdo corresponde ao registro correto.
Problemas Comuns e Como Resolvê-los
Erro “Subscrito fora do intervalo” ao executar a macro
Esse erro ocorre quando o nome do campo na macro não corresponde a um campo em sua fonte de dados. Abra sua fonte de dados e anote os cabeçalhos exatos das colunas. Atualize os nomes dos campos na macro para corresponder a esses cabeçalhos. Se sua fonte de dados usar cabeçalhos com espaços, coloque o nome entre colchetes, por exemplo .DataFields("[First Name]").Value.
Arquivos são salvos, mas o conteúdo está em branco ou incompleto
A macro pode estar executando a mesclagem antes que o documento principal esteja totalmente conectado à fonte de dados. Certifique-se de ter executado uma mesclagem de teste para um novo documento pelo menos uma vez antes de executar a macro. Confirme também que o documento principal da mala direta é o documento ativo quando você executa a macro.
A macro não aparece na caixa de diálogo Macros
A macro não aparecerá se você colocou o código em um módulo de documento em vez de um módulo padrão. No editor VBA, clique com o botão direito no módulo que contém seu código e verifique se ele está listado em Normal ou no projeto do seu documento. Se estiver no projeto do documento, a macro estará disponível apenas quando esse documento estiver aberto.
Nomes de arquivo contêm caracteres inválidos como dois-pontos ou barras
O Windows não permite certos caracteres em nomes de arquivo. Se sua fonte de dados contiver valores com caracteres como : / \ ? " < > |, o método SaveAs2 falhará. Adicione uma linha na macro para substituir esses caracteres antes de montar o nome do arquivo. Por exemplo: FieldValue1 = Replace(FieldValue1, ":", "").
Comparação de Métodos de Saída da Mala Direta
| Item | Mesclagem Padrão para Novo Documento | Macro com Padrão de Nome Personalizado |
|---|---|---|
| Formato de saída | Documento único com todos os registros | Um arquivo por registro |
| Controle do nome do arquivo | Nenhum — usuário salva manualmente | Controle total usando valores de campos |
| Tempo de configuração | Nenhum | 15–30 minutos para criação da macro |
| Repetibilidade | Salvamento manual a cada vez | Executar macro para qualquer fonte de dados |
| Tratamento de erros | Usuário corrige problemas manualmente | Requer depuração VBA |
Agora você pode salvar cada registro de mala direta como um arquivo separado com um padrão de nome personalizado usando a macro fornecida. Teste a macro com um conjunto de dados pequeno primeiro para confirmar que o padrão de nome funciona corretamente. Para uso avançado, modifique a macro para incluir carimbos de data, números sequenciais ou lógica condicional baseada em valores de campos. A chave para uma saída confiável é corresponder exatamente os nomes dos campos e garantir que a pasta de destino exista antes de executar a macro.