Localizar e substituir texto manualmente em um documento longo é lento e sujeito a erros. A caixa de diálogo Localizar e Substituir do Word funciona para buscas simples, mas não lida com lógica condicional ou processamento em lote em vários documentos. As macros VBA permitem automatizar tarefas complexas de localizar e substituir com precisão. Este artigo explica como escrever e executar código VBA para localizar e substituir texto no Word, cobrindo substituições básicas, buscas com curingas e alterações de formatação.
Principais Conclusões: Automatizando Localizar e Substituir com VBA no Word
- Método Selection.Find.Execute: Realiza uma operação de localização na seleção ou intervalo atual.
- Propriedades do objeto Range.Find: Defina Text, Replacement.Text, Forward, Wrap e Format para controlar a busca.
- Constante wdReplaceAll: Substitui todas as ocorrências em uma única chamada, sem loop.
Como o Localizar e Substituir do VBA Funciona no Word
O VBA usa o objeto Find anexado a um objeto Range. O Range pode ser o documento inteiro, uma seleção, um parágrafo ou um intervalo personalizado. Você define propriedades no objeto Find para especificar o que procurar e como substituir. O método principal é Execute, que executa a busca e, opcionalmente, realiza a substituição.
O objeto Find suporta as mesmas opções da caixa de diálogo Localizar e Substituir. Você pode pesquisar texto, formatação, caracteres especiais (como marcas de parágrafo) e usar curingas. O objeto Replacement dentro de Find contém o texto de substituição e a formatação. Definir Replacement.Text determina o que substituirá o texto encontrado. A propriedade Wrap controla o que acontece quando a busca chega ao final do intervalo.
Para substituir todas as ocorrências no documento, chame Execute com o parâmetro Replace definido como wdReplaceAll. Isso executa a substituição em uma única passagem, sem loop. O loop só é necessário quando você precisa inspecionar cada correspondência antes de decidir substituí-la.
Pré-requisitos
Você precisa ter acesso ao editor VBA. Pressione Alt+F11 para abri-lo. O documento deve ser um arquivo habilitado para macro (.docm) ou você deve salvá-lo como .docm após adicionar a macro. Habilite macros na Central de Confiabilidade, se solicitado. Não é necessário ter experiência avançada em programação, mas você deve se sentir confortável em copiar e colar código no editor.
Passos para Escrever uma Macro VBA para Localizar e Substituir
- Abra o Editor VBA
Pressione Alt+F11 no Word. A janela do editor VBA é aberta. No Explorador de Projetos, localize o nome do seu documento em Normal ou Project. - Insira um novo módulo
Clique em Insert > Module no menu. Uma janela de código em branco aparece. É aqui que você colará o código da macro. - Cole o código da macro
Copie o código abaixo e cole-o na janela do módulo. O código substitui cada ocorrência de “texto antigo” por “novo texto” em todo o documento.
Sub FindAndReplaceBasic()
With ActiveDocument.Range.Find
.Text = "texto antigo"
.Replacement.Text = "novo texto"
.Forward = True
.Wrap = wdFindContinue
.Format = False
.MatchCase = False
.MatchWholeWord = True
.MatchWildcards = False
.MatchSoundsLike = False
.MatchAllWordForms = False
.Execute Replace:=wdReplaceAll
End With
End Sub
- Execute a macro
Pressione F5 enquanto o cursor estiver dentro do código da macro. Como alternativa, feche o editor e pressione Alt+F8 no Word. Selecione FindAndReplaceBasic na lista e clique em Executar. - Verifique o resultado
Percorra o documento para confirmar que “texto antigo” foi substituído por “novo texto”. Se a substituição não funcionou, verifique se o texto corresponde exatamente, incluindo espaços e pontuação.
Usando Curingas para Correspondência de Padrões
Defina .MatchWildcards = True para usar padrões curinga. Por exemplo, para substituir qualquer sequência de dois dígitos seguidos por um espaço por “XX “, use este código:
Sub FindAndReplaceWildcards()
With ActiveDocument.Range.Find
.Text = "[0-9]{2} "
.Replacement.Text = "XX "
.Forward = True
.Wrap = wdFindContinue
.MatchWildcards = True
.Execute Replace:=wdReplaceAll
End With
End Sub
Substituindo Formatação
Para substituir texto e aplicar formatação, defina as propriedades Replacement.Font ou Replacement.ParagraphFormat. O exemplo abaixo substitui todas as ocorrências de “urgente” por “URGENTE” em texto vermelho e negrito:
Sub FindAndReplaceFormatting()
With ActiveDocument.Range.Find
.Text = "urgente"
.Replacement.Text = "URGENTE"
.Replacement.Font.Bold = True
.Replacement.Font.Color = wdColorRed
.Forward = True
.Wrap = wdFindContinue
.Format = True
.Execute Replace:=wdReplaceAll
End With
End Sub
Erros Comuns e Limitações ao Usar VBA para Localizar e Substituir
A Macro VBA é Executada, mas Nada Muda
A causa mais comum é uma incompatibilidade no texto de pesquisa. Verifique espaços extras, espaços inseparáveis ou caracteres ocultos. Copie o texto exato do documento para a propriedade .Text. Verifique também se .MatchCase e .MatchWholeWord estão configurados corretamente. Se o texto contiver caracteres especiais como marcas de parágrafo, use a constante VBA ^p em vez do caractere real.
A Macro Substitui Texto em Cabeçalhos ou Rodapés
O código acima atua apenas no corpo principal do documento. Para substituir texto em cabeçalhos e rodapés, você deve percorrer os cabeçalhos e rodapés de cada seção. Use um loop For Each sobre ActiveDocument.Sections e acesse as coleções Headers e Footers. Cada intervalo de cabeçalho tem seu próprio objeto Find.
A Macro VBA é Muito Lenta em Documentos Grandes
Usar wdReplaceAll é mais rápido do que fazer loop com Find.Execute repetidamente. Se você precisar fazer loop, desative a atualização da tela com Application.ScreenUpdating = False no início da macro e reative com True no final. Desative também Application.DisplayAlerts para suprimir pop-ups.
A Macro Não Funciona Após Salvar como .docx
O Word remove o código VBA de arquivos .docx. Salve o documento como um documento habilitado para macro (.docm). Se você abrir um arquivo .docm e as macros estiverem desabilitadas, habilite-as em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro. Selecione “Habilitar todas as macros” ou assine digitalmente a macro.
| Recurso | Localizar e Substituir Integrado | Macro VBA |
|---|---|---|
| Automação | Manual por documento | Lote em vários documentos |
| Suporte a curingas | Sim, via caixa de diálogo | Sim, com MatchWildcards |
| Substituição de formatação | Limitada a estilos de fonte | Controle total sobre fonte, parágrafo e outras propriedades |
| Lógica condicional | Nenhuma | Pode inspecionar cada correspondência antes de substituir |
| Reutilização | Precisa reaplicar as configurações a cada vez | Execute a mesma macro a qualquer momento |
O VBA oferece controle total sobre operações de localizar e substituir que a caixa de diálogo integrada não consegue igualar. Comece com substituições simples e adicione curingas ou formatação à medida que ganhar confiança. Para tarefas avançadas, explore os métodos ClearFormatting e ClearAllFuzzyOptions do objeto Find para redefinir todas as propriedades de pesquisa antes de definir novas. Isso evita que configurações residuais interfiram na sua próxima busca.