Como Usar VBA no Word para Aplicar Estilos Programaticamente em Todas as Seções
🔍 WiseChecker

Como Usar VBA no Word para Aplicar Estilos Programaticamente em Todas as Seções

Aplicar um estilo consistente a cada seção de um documento longo do Word manualmente leva muito tempo e convida a erros. Macros VBA do Word permitem automatizar a aplicação de estilos de parágrafo, caractere e lista em todas as seções com um único comando. Este artigo explica como escrever e executar uma macro VBA que percorre cada seção e aplica um estilo especificado a cada parágrafo ou intervalo selecionado. Você aprenderá os objetos principais — Sections, Paragraphs e Style — e verá exemplos de código prontos para uso.

Principais Conclusões: Automatizando a Aplicação de Estilos com VBA no Word

  • ActiveDocument.Sections.Count e For Each sec In ActiveDocument.Sections: Percorra todas as seções do documento sem seleção manual.
  • sec.Range.Paragraphs e .Style = wdStyleHeading1: Aplique um estilo interno ou personalizado a todos os parágrafos de uma única seção em uma passagem da macro.
  • Application.ScreenUpdating = False: Acelere a macro e evite oscilações de tela ao processar centenas de parágrafos em várias seções.

ADVERTISEMENT

Por que Usar VBA para Aplicar Estilos em Todas as Seções

Documentos do Word com várias seções geralmente têm formatação inconsistente porque cada seção pode ter seu próprio layout de página, cabeçalhos e definições de estilo. Selecionar manualmente cada seção e aplicar um estilo é tedioso e propenso a erros. As macros VBA eliminam a repetição usando a coleção Sections, que contém todas as seções do documento. A macro itera por cada seção, acessa sua coleção Range.Paragraphs e atribui um estilo a cada parágrafo nesse intervalo. Essa abordagem funciona para estilos internos como Heading 1, Normal e estilos personalizados que você criou.

Antes de escrever a macro, habilite a guia Desenvolvedor no Word. Vá em Arquivo > Opções > Personalizar Faixa de Opções e marque Desenvolvedor. Abra o editor VBA pressionando Alt+F11. Insira um novo módulo clicando em Inserir > Módulo. Todos os exemplos de código abaixo vão nesse módulo.

Pré-requisitos para Executar Macros VBA

Seu documento deve ser salvo em um formato habilitado para macro. Use Arquivo > Salvar Como e escolha Documento Habilitado para Macro do Word (.docm). Se o documento for .docx, a macro será executada, mas você não poderá salvar o código a menos que converta o arquivo. Defina a segurança de macro para permitir macros assinadas ou confiáveis: vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro e selecione Habilitar todas as macros (não recomendado para fontes não confiáveis) ou adicione seu projeto de macro à lista de locais confiáveis.

Macro Passo a Passo para Aplicar um Estilo a Todos os Parágrafos em Cada Seção

A macro a seguir aplica um estilo interno chamado wdStyleHeading1 a cada parágrafo em cada seção. Substitua a constante de estilo por qualquer nome de estilo interno ou uma string para um estilo personalizado.

  1. Abra o Editor VBA e Insira um Novo Módulo
    Pressione Alt+F11 para abrir o editor VBA. No Explorador de Projetos, clique com o botão direito em Normal ou no nome do seu projeto e escolha Inserir > Módulo. Uma janela de código em branco é aberta.
  2. Declare o Procedimento Sub e as Variáveis
    Digite o código a seguir para iniciar a macro e declarar um objeto de seção e um objeto de parágrafo:
    Sub ApplyStyleToAllSections()
    Dim sec As Section
    Dim para As Paragraph
  3. Percorra Cada Seção
    Adicione um loop For Each que itera por ActiveDocument.Sections:
    For Each sec In ActiveDocument.Sections
  4. Percorra Cada Parágrafo na Seção
    Dentro do loop de seção, adicione um segundo loop para percorrer todos os parágrafos no intervalo da seção:
    For Each para In sec.Range.Paragraphs
    para.Style = wdStyleHeading1
    Next para
  5. Feche Ambos os Loops e Finalize o Sub
    Após o loop de parágrafos, digite Next sec e depois End Sub. A macro completa fica assim:
    Sub ApplyStyleToAllSections()
    Dim sec As Section
    Dim para As Paragraph
    For Each sec In ActiveDocument.Sections
    For Each para In sec.Range.Paragraphs
    para.Style = wdStyleHeading1
    Next para
    Next sec
    End Sub
  6. Execute a Macro
    Feche o editor VBA. Pressione Alt+F8, selecione ApplyStyleToAllSections e clique em Executar. Todos os parágrafos em todas as seções se tornam estilo Heading 1.

Aplicando um Estilo Personalizado pelo Nome

Se você tem um estilo personalizado chamado “ReportBody”, substitua wdStyleHeading1 por uma string: para.Style = "ReportBody". Constantes de estilo internas como wdStyleNormal ou wdStyleBodyText também funcionam. Use o Navegador de Objetos no VBA (F2) para pesquisar constantes wdStyle.

ADVERTISEMENT

Refinando a Macro para Seções Específicas ou Intervalos de Parágrafos

A macro básica aplica um estilo a cada parágrafo. Você pode modificá-la para segmentar apenas o primeiro parágrafo de cada seção, pular parágrafos vazios ou aplicar estilos diferentes a seções diferentes.

Aplicar Estilo Apenas ao Primeiro Parágrafo de Cada Seção

Use sec.Range.Paragraphs(1).Style para segmentar apenas o primeiro parágrafo. Isso é útil para títulos de seção.

Pular Parágrafos Vazios

Adicione uma condição If dentro do loop de parágrafos:
If Len(para.Range.Text) > 1 Then
para.Style = wdStyleHeading1
End If

Isso evita aplicar um estilo de título a linhas em branco.

Aplicar Estilos Diferentes por Índice de Seção

Use sec.Index para identificar o número da seção. Por exemplo, defina a seção 1 como Heading 1 e a seção 2 como Normal:

If sec.Index = 1 Then
para.Style = wdStyleHeading1
ElseIf sec.Index = 2 Then
para.Style = wdStyleNormal
End If

Erros Comuns e Dicas de Desempenho da Macro

“A macro é executada, mas nada muda”

O nome ou constante do estilo pode estar com erro de digitação. Verifique o nome exato do estilo no painel Estilos. Para estilos internos, use a constante VBA, não uma string. Se usar uma string, coloque-a entre aspas duplas. Verifique se o documento não está protegido. Vá em Revisão > Restringir Edição e pare a proteção, se necessário.

“A macro está muito lenta em um documento longo”

O Word atualiza a tela após cada alteração de estilo. Desabilite a atualização de tela no início da macro e reabilite no final:

Application.ScreenUpdating = False
' ... seus loops ...
Application.ScreenUpdating = True

“A macro aplica o estilo a cabeçalhos e rodapés”

A propriedade sec.Range exclui cabeçalhos e rodapés por padrão. Para incluí-los, use sec.Headers(wdHeaderFooterPrimary).Range.Paragraphs. Cuidado, pois cabeçalhos geralmente precisam de formatação diferente.

“Recebo o erro de tempo de execução 5941: O membro solicitado da coleção não existe”

Isso ocorre quando você referencia um índice de seção que não existe. Use ActiveDocument.Sections.Count para verificar o número total de seções antes de fazer o loop.

ADVERTISEMENT

Métodos de Aplicação de Estilo no VBA: Constante vs String vs Objeto

Item Constante Interna (ex.: wdStyleHeading1) Nome em String (ex.: “Heading 1”) Objeto Style (ex.: ActiveDocument.Styles(“Heading 1”))
Sintaxe para.Style = wdStyleHeading1 para.Style = “Heading 1” para.Style = ActiveDocument.Styles(“Heading 1”)
Sensibilidade a maiúsculas/minúsculas Não se aplica Insensível Insensível
Funciona com estilos personalizados Não Sim Sim
Desempenho Mais rápido Rápido Ligeiramente mais lento devido à pesquisa do objeto
Risco de erro Baixo — verificação em tempo de compilação Médio — erro de digitação causa erro em tempo de execução Médio — o estilo deve existir

Use a constante interna ao aplicar um estilo padrão como Normal ou Heading 1. Use o nome em string para estilos personalizados. Use o objeto Style apenas quando precisar acessar propriedades do próprio estilo, como sua fonte ou formatação de parágrafo.

Conclusão

Agora você pode escrever uma macro VBA que aplica qualquer estilo de parágrafo a cada seção de um documento do Word. Comece com o loop simples usando For Each sec In ActiveDocument.Sections e refine-o para pular parágrafos vazios ou segmentar seções específicas. Para documentos grandes, sempre desabilite a atualização de tela com Application.ScreenUpdating = False para melhorar a velocidade. Para ir além, explore o objeto Find para aplicar estilos apenas a parágrafos que contenham texto específico, como todos os parágrafos que começam com a palavra “Capítulo”.

ADVERTISEMENT