Como Escrever uma Macro VBA no Word que Percorre Todas as Tabelas de um Documento
🔍 WiseChecker

Como Escrever uma Macro VBA no Word que Percorre Todas as Tabelas de um Documento

Você tem um documento do Word com muitas tabelas e precisa aplicar uma formatação consistente, corrigir alinhamento ou extrair dados de cada uma. Editar manualmente cada tabela é lento e sujeito a erros quando há dezenas ou centenas delas. Uma macro VBA pode automatizar essa tarefa percorrendo todas as tabelas do documento e executando a mesma ação em cada uma. Este artigo explica como escrever essa macro, abordando os objetos essenciais, a estrutura do loop e as armadilhas comuns a evitar.

Principais Conclusões: Macro VBA para Percorrer Todas as Tabelas no Word

  • Coleção Tables e loop For Each: Use ActiveDocument.Tables e For Each tbl In ActiveDocument.Tables para iterar sobre cada tabela do documento.
  • Objetos Cell e Range: Acesse células individuais via tbl.Cell(Linha, Coluna).Range e modifique texto ou formatação usando o objeto Range.
  • Tratamento de erros com On Error Resume Next: Impede que a macro pare se uma tabela estiver vazia ou tiver células mescladas que causem erro em tempo de execução.

ADVERTISEMENT

Entendendo o Modelo de Objeto de Tabela do Word no VBA

O Word expõe todas as tabelas de um documento por meio da coleção Tables. Cada tabela é um objeto Table que contém uma coleção Rows e uma coleção Columns. O objeto Cell representa uma célula, e você o acessa pelo índice de linha e coluna. O objeto Range dentro de uma célula contém o texto e a formatação que você pode ler ou modificar.

O loop For Each é a maneira mais confiável de visitar cada tabela porque ele lida automaticamente com a contagem da coleção. Você não precisa saber quantas tabelas existem antes. O loop executa uma vez para cada objeto de tabela na coleção Tables, independentemente de as tabelas estarem aninhadas ou colocadas em cabeçalhos e rodapés.

Pré-requisitos para Executar Macros VBA

Antes de escrever a macro, certifique-se de que as macros estão habilitadas no Word. Vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro e selecione Habilitar todas as macros ou Habilitar macros VBA. Você também precisa da guia Desenvolvedor visível. Clique com o botão direito na faixa de opções, selecione Personalizar Faixa de Opções e marque a caixa Desenvolvedor no painel direito.

Escrevendo a Macro Principal para Percorrer Cada Tabela

A macro a seguir percorre todas as tabelas do documento ativo e aplica uma ação simples: negrito na primeira linha de cada tabela. Você pode substituir o corpo do loop por qualquer operação necessária.

  1. Abra o editor VBA
    Pressione Alt + F11 no Word para abrir o editor do Visual Basic for Applications.
  2. Insira um novo módulo
    No painel do Gerenciador de Projetos, clique com o botão direito em Normal ou no nome do seu documento. Escolha Inserir > Módulo. Uma janela de código em branco aparece.
  3. Cole o código da macro
    Copie e cole o código a seguir na janela do módulo:
    Sub NegritoPrimeiraLinhaTodasTabelas()
        Dim tbl As Table
        Dim r As Integer
        Dim c As Integer
        
        On Error Resume Next
        
        For Each tbl In ActiveDocument.Tables
            ' Negrito em todas as células da primeira linha
            For c = 1 To tbl.Columns.Count
                tbl.Cell(1, c).Range.Bold = True
            Next c
        Next tbl
        
        On Error GoTo 0
        
        MsgBox "Concluído. Processadas " & ActiveDocument.Tables.Count & " tabelas."
    End Sub
  4. Execute a macro
    Pressione F5 enquanto o cursor estiver dentro da macro, ou vá para a guia Desenvolvedor e clique em Macros. Selecione NegritoPrimeiraLinhaTodasTabelas e clique em Executar.

A macro usa On Error Resume Next para pular tabelas que causam erros, como aquelas com células mescladas que tornam Cell(1, c) inválido. Após o loop, On Error GoTo 0 restaura o tratamento de erros normal. A caixa de mensagem mostra quantas tabelas foram encontradas.

Modificando o Loop para Executar Outras Ações

Você pode substituir o loop interno For c por qualquer operação de tabela. Exemplos comuns incluem:

  • Alterar cor de fundo da célula: tbl.Cell(r, c).Shading.BackgroundPatternColor = wdColorLightYellow
  • Definir largura da coluna: tbl.Columns(1).Width = InchesToPoints(2)
  • Remover bordas: tbl.Borders.Enable = False
  • Alinhar texto em todas as células: tbl.Range.ParagraphFormat.Alignment = wdAlignParagraphCenter

Para percorrer todas as células de cada tabela, use um loop For r e For c aninhado sobre tbl.Rows.Count e tbl.Columns.Count.

ADVERTISEMENT

Problemas Comuns ao Percorrer Tabelas

A Macro Para com um Erro em Tempo de Execução em uma Tabela Específica

A causa mais frequente são células mescladas. Quando uma célula abrange várias linhas ou colunas, o objeto Cell pode não existir nas coordenadas esperadas. A instrução On Error Resume Next ignora esse erro. Se você precisar processar células mescladas, use a coleção tbl.Range.Cells em vez da indexação por linha-coluna, mas observe que essa coleção conta todas as células, incluindo aquelas que fazem parte de uma mesclagem.

A Macro Não Processa Tabelas em Cabeçalhos ou Rodapés

ActiveDocument.Tables inclui apenas tabelas no corpo principal do documento. Para incluir tabelas em cabeçalhos, rodapés, caixas de texto ou notas de rodapé, você deve acessar cada intervalo de história. Uma macro mais avançada percorreria ActiveDocument.StoryRanges e verificaria a coleção Tables de cada intervalo.

A Macro Fica Lenta em Documentos com Muitas Tabelas

O Word atualiza a tela após cada operação por padrão. Adicione Application.ScreenUpdating = False no início da macro e Application.ScreenUpdating = True no final para acelerar significativamente. Desative também o cálculo automático com Application.Calculation = wdCalculationManual se sua macro modificar campos.

ActiveDocument.Tables vs Selection.Tables: Diferenças de Escopo

Item ActiveDocument.Tables Selection.Tables
Escopo Todas as tabelas no corpo principal do documento ativo Apenas tabelas que intersectam a seleção atual
Caso de uso Formatação global ou extração de dados em todo o documento Ação direcionada em uma ou poucas tabelas que o usuário destacou
Risco de erro Pode falhar em tabelas em cabeçalhos ou caixas de texto, a menos que os intervalos de história sejam incluídos Requer que o usuário selecione as tabelas manualmente antes de executar a macro
Desempenho Mais lento em documentos com centenas de tabelas Mais rápido porque processa apenas o subconjunto selecionado

Escolha ActiveDocument.Tables quando precisar aplicar uma alteração a todas as tabelas sem intervenção manual. Use Selection.Tables quando quiser que o usuário controle quais tabelas são afetadas.

Agora você tem uma macro VBA funcional que percorre todas as tabelas de um documento do Word. Comece testando a macro de exemplo em uma cópia do seu documento. Depois de confirmar que funciona, substitua o loop interno pela sua lógica específica de formatação ou extração de dados. Para documentos com tabelas em cabeçalhos ou rodapés, estenda a macro para iterar por ActiveDocument.StoryRanges. Adicione Application.ScreenUpdating = False para acelerar o processamento quando você tiver mais de 50 tabelas.

ADVERTISEMENT