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.
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.
- 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. - 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. - 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 - 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. - 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
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.