Como Usar VBA para Localizar e Substituir Texto no Word
🔍 WiseChecker

Como Usar VBA para Localizar e Substituir Texto no Word

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.

ADVERTISEMENT

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

  1. 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.
  2. 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.
  3. 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
  1. 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.
  2. 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

ADVERTISEMENT

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.

ADVERTISEMENT