Como Usar VBA para Manipular Tabelas no Word
🔍 WiseChecker

Como Usar VBA para Manipular Tabelas no Word

Você tem um documento do Word com tabelas que precisam de formatação repetitiva, entrada de dados ou alterações estruturais. Editar manualmente cada tabela é lento e sujeito a erros. O Visual Basic for Applications (VBA) permite automatizar essas tarefas com código. Este artigo explica como escrever e executar macros VBA para selecionar, modificar, formatar e preencher tabelas do Word.

Principais conclusões: Automatizando Tabelas do Word com VBA

  • Alt+F11 para abrir o editor VBA: Este é o ambiente principal onde você escreve e executa macros para manipulação de tabelas.
  • Tables(Índice) para referenciar uma tabela específica: Use o número do índice ou a coleção ActiveDocument.Tables para localizar a tabela correta no documento.
  • Cell(Linha, Coluna).Range.Text para ler ou escrever conteúdo de célula: Esta propriedade permite obter ou definir o texto dentro de qualquer célula da tabela programaticamente.

ADVERTISEMENT

O que o VBA Pode Fazer com Tabelas do Word

VBA (Visual Basic for Applications) é a linguagem de macro integrada aos aplicativos do Microsoft Office. No Word, o VBA pode acessar todos os objetos de um documento, incluindo tabelas, linhas, células e suas propriedades de formatação. Você pode escrever uma macro para aplicar formatação consistente em dezenas de tabelas, extrair dados de células para variáveis ou criar novas tabelas do zero.

Antes de escrever qualquer código VBA, você precisa habilitar a guia Desenvolvedor no Word. Vá em Arquivo > Opções > Personalizar Faixa de Opções e marque a caixa Desenvolvedor no painel direito. Esta guia dá acesso ao editor VBA, gravação de macros e configurações de segurança de macro. Você também precisa definir a segurança de macro para habilitar todas as macros ou assinar digitalmente seu código. Vá em Arquivo > Opções > Central de Confiabilidade > Configurações da Central de Confiabilidade > Configurações de Macro e escolha Habilitar todas as macros.

Entendendo o Modelo de Objetos do Word para Tabelas

O modelo de objetos do Word organiza as tabelas em uma hierarquia. O objeto Document contém uma coleção Tables. Cada objeto Table contém uma coleção Rows e uma coleção Columns. Cada Row contém Cells, e cada Cell tem uma propriedade Range que armazena o texto e a formatação. Você navega por essa hierarquia usando notação de ponto no VBA. Por exemplo, ActiveDocument.Tables(1).Cell(2, 3).Range.Text refere-se ao texto na terceira coluna da segunda linha da primeira tabela no documento ativo.

Os números de índice para tabelas, linhas e colunas começam em 1, não em 0. Isso é diferente de muitas linguagens de programação. Sempre verifique qual tabela é o índice 1 observando a ordem em que as tabelas aparecem no corpo do documento. Tabelas dentro de estruturas aninhadas, como cabeçalhos ou caixas de texto, não estão incluídas na coleção ActiveDocument.Tables.

Escrevendo e Executando uma Macro VBA para Editar Tabelas do Word

Siga estas etapas para criar uma macro que seleciona uma tabela, altera sua formatação e atualiza o conteúdo das células. A macro de exemplo adicionará uma borda à primeira tabela, negritará a linha de cabeçalho e inserirá uma fórmula de soma na última coluna.

  1. Abra o Editor VBA
    Pressione Alt+F11 no Word. O editor VBA abre em uma janela separada. Se o Explorador de Projetos não estiver visível, pressione Ctrl+R para exibi-lo.
  2. Insira um Novo Módulo
    No Explorador de Projetos, clique com o botão direito em Normal ou no nome do seu documento. Selecione Inserir > Módulo. Uma janela de código em branco aparece.
  3. Escreva o Código da Macro
    Na janela do módulo, digite o seguinte código:
    Sub FormatAndUpdateTable()
        Dim tbl As Table
        Dim r As Integer
        Dim c As Integer
        
        ' Referencia a primeira tabela do documento
        Set tbl = ActiveDocument.Tables(1)
        
        ' Aplica uma borda sólida a toda a tabela
        With tbl.Borders
            .InsideLineStyle = wdLineStyleSingle
            .OutsideLineStyle = wdLineStyleSingle
            .InsideLineWidth = wdLineWidth050pt
            .OutsideLineWidth = wdLineWidth075pt
        End With
        
        ' Negrita a primeira linha (linha de cabeçalho)
        For c = 1 To tbl.Columns.Count
            tbl.Cell(1, c).Range.Bold = True
        Next c
        
        ' Insere uma fórmula de soma na última coluna, pulando o cabeçalho
        For r = 2 To tbl.Rows.Count
            tbl.Cell(r, tbl.Columns.Count).Range.Text = "=SUM(LEFT)"
        Next r
        
        MsgBox "Formatação e fórmulas aplicadas à tabela."
    End Sub
  4. Execute a Macro
    Posicione o cursor em qualquer lugar dentro do código da macro e pressione F5. Alternativamente, feche o editor, vá em Desenvolvedor > Macros, selecione FormatAndUpdateTable e clique em Executar.
  5. Salve a Macro para Uso Futuro
    Para manter a macro disponível em todos os documentos, salve-a no modelo Normal.dotm. No editor VBA, arraste seu módulo para Normal no Explorador de Projetos. Salve Normal.dotm quando solicitado.

Lendo Dados de uma Tabela com VBA

Para extrair dados de uma tabela, percorra cada célula e armazene o texto em um array ou escreva em outro documento. A macro a seguir copia todos os valores das células da primeira tabela para um novo documento como texto simples, uma linha por célula.

Sub ExportTableToText()
    Dim tbl As Table
    Dim r As Integer
    Dim c As Integer
    Dim newDoc As Document
    
    Set tbl = ActiveDocument.Tables(1)
    Set newDoc = Documents.Add
    
    For r = 1 To tbl.Rows.Count
        For c = 1 To tbl.Columns.Count
            newDoc.Content.InsertAfter _
                tbl.Cell(r, c).Range.Text & vbCrLf
        Next c
    Next r
End Sub

Esta macro cria um novo documento em branco e anexa o texto de cada célula seguido por uma quebra de linha. A propriedade Range.Text inclui um caractere de marca de célula (ASCII 13 ou 7) no final. Para removê-lo, use a função Replace do VBA: Replace(tbl.Cell(r, c).Range.Text, vbCr, “”) ou Chr(7).

Criando uma Nova Tabela do Zero

Você pode criar uma tabela inteiramente com VBA. A macro a seguir adiciona uma tabela com 5 linhas e 3 colunas na posição do cursor, preenche a linha de cabeçalho com nomes de colunas e define larguras de coluna.

Sub CreateNewTable()
    Dim tbl As Table
    Dim rng As Range
    
    Set rng = Selection.Range
    Set tbl = ActiveDocument.Tables.Add(rng, 5, 3)
    
    ' Define larguras das colunas
    tbl.Columns(1).Width = InchesToPoints(1.5)
    tbl.Columns(2).Width = InchesToPoints(2)
    tbl.Columns(3).Width = InchesToPoints(1.5)
    
    ' Preenche a linha de cabeçalho
    tbl.Cell(1, 1).Range.Text = "Produto"
    tbl.Cell(1, 2).Range.Text = "Quantidade"
    tbl.Cell(1, 3).Range.Text = "Preço"
    
    ' Aplica formatação ao cabeçalho
    For c = 1 To 3
        tbl.Cell(1, c).Range.Bold = True
        tbl.Cell(1, c).Shading.BackgroundPatternColor = wdColorGray25
    Next c
End Sub

ADVERTISEMENT

Erros Comuns em VBA com Tabelas e Como Evitá-los

Erro de Tempo de Execução 5941: O membro solicitado da coleção não existe

Este erro ocorre quando você referencia um índice de tabela que não existe. Por exemplo, ActiveDocument.Tables(2) falha se o documento tiver apenas uma tabela. Sempre verifique a propriedade Tables.Count antes de acessar um índice específico. Use uma instrução If: If ActiveDocument.Tables.Count >= 2 Then.

O Texto do Intervalo da Célula Inclui Caracteres Extras

A propriedade Range.Text de uma célula retorna o texto visível mais dois caracteres ocultos: uma marca de célula (ASCII 7) e um marcador de fim de célula. Ao comparar ou exportar valores de células, remova esses caracteres com a função Replace ou use a seguinte função auxiliar:

Function CleanCellText(cell As Cell) As String
    Dim raw As String
    raw = cell.Range.Text
    ' Remove os dois últimos caracteres (marca de célula e marcador de fim de célula)
    CleanCellText = Left(raw, Len(raw) - 2)
End Function

A Macro Não é Executada em Todas as Tabelas do Documento

Se sua macro processa apenas a primeira tabela, provavelmente você não está percorrendo a coleção Tables. Use um loop For Each para processar cada tabela:

Dim tbl As Table
For Each tbl In ActiveDocument.Tables
    ' Seu código aqui
Next tbl

As Bordas da Tabela Não Aparecem Após Executar a Macro

A propriedade Borders se aplica a todo o objeto tabela. Se você definir InsideLineStyle mas não OutsideLineStyle, as bordas externas podem permanecer invisíveis. Sempre defina InsideLineStyle e OutsideLineStyle, e defina as propriedades LineWidth correspondentes. Use wdLineStyleSingle para uma linha sólida.

Métodos VBA para Manipulação de Tabelas: Manual vs Automatizado

Tarefa Método Manual Método VBA
Adicionar uma linha Clique direito na linha > Inserir > Inserir Linhas Abaixo tbl.Rows.Add ou tbl.Rows(2).Select seguido de Selection.InsertRowsBelow
Excluir uma coluna Selecione a coluna > Clique direito > Excluir Colunas tbl.Columns(3).Delete
Mesclar duas células Selecione as células > Guia Layout > Mesclar Células tbl.Cell(1,1).Merge tbl.Cell(1,2)
Definir cor de fundo da célula Selecione a célula > Sombreamento na guia Design da Tabela tbl.Cell(2,1).Shading.BackgroundPatternColor = wdColorLightBlue
Classificar dados da tabela Selecione a tabela > Guia Layout > Classificar tbl.Sort ExcludeHeader:=True, FieldNumber:=1

As macros VBA podem executar essas tarefas em dezenas de tabelas em segundos. Os métodos manuais exigem cliques repetitivos e estão sujeitos a erros humanos.

Agora você sabe como escrever macros VBA para selecionar, formatar, ler e criar tabelas no Word. Comece gravando uma macro simples com Desenvolvedor > Gravar Macro para ver o código gerado e, em seguida, modifique-o para segmentar índices e propriedades específicas da tabela. Para tarefas avançadas, como mesclar células condicionalmente ou exportar dados de tabela para o Excel, combine o objeto de tabela com o modelo de objetos do Excel usando ligação antecipada. Sempre teste as macros em uma cópia do seu documento primeiro para evitar perda de dados.

ADVERTISEMENT