Trabalhando com tabelas - VBA
Neste tutorial apresentarei alguns exemplos de como utilizar tabelas através do VBA.
O exemplo abaixo insere uma tabela de cinco colunas e oito linhas no início do documento ativo. A estrutura For Each...Next é usada para percorrer cada célula da tabela.
Dentro da estrutura For Each...Next, o método InsertAfter é usado para adicionar texto às células da tabela (Célula 1, Célula 2 e assim por diante). Neste exemplo adicionaremos números sequenciais em cada célula, mas também pode ser adicionado um texto qualquer.
No ambiente de desenvolvimento insira um novo módulo.
Na Janela de Código adicione o Código abaixo:
Sub criartabela()
Dim docActive As Document
Dim novatab As Table
Dim celulatabela As Cell
Dim intCount As Integer
Set docActive = ActiveDocument
Set novatab = docActive.Tables.Add( Range:=docActive.Range(Start:=0, End:=0),
NumRows:=8,
NumColumns:=5)
intCount = 1
For Each celulatabela In novatab.Range.Cells
celulatabela.Range.InsertAfter "0" & intCount
intCount = intCount + 1
Next celulatabela
novatab.AutoFormat Format:=wdTableFormatColorful2,
ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True
End Sub
Deverá ficar como na imagem a seguir:
Feche o Editor do Visual Basic (VBA) para voltar ao Word.
Na Guia Desenvolvedor, no Grupo Código clique em Macros.
Selecione a macro criartabela e clique em Executar.
Veja o Resultado:
Se quiser criar a tabela sem conteúdo retire a variável celulatabela e as linhas de código da estrutura For Each ...Next.
Ficará assim:
Sub criartabela()
Dim docActive As Document
Dim novatab As Table
Dim intCount As Integer
Set docActive = ActiveDocument
Set novatab
= docActive.Tables.Add(Range:=docActive.Range(Start:=0, End:=0), NumRows:=8,
NumColumns:=5)
intCount = 1
novatab.AutoFormat Format:=wdTableFormatColorful2,
ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True
End Sub
O resultado será como a imagem abaixo:
Pra inserir um texto, por exemplo, na primeira célula use a macro abaixo:
Sub inserirtexto()
If ActiveDocument.Tables.Count >= 1 Then
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
.Delete
.InsertAfter Text:="Tutoriais"
End With
End If
End Sub
Veja o resultado:
Pra inserir textos, por exemplo, em cada célula da primeira linha use a macro abaixo:
Sub inserirtexto2()
If ActiveDocument.Tables.Count >= 1 Then
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
.Delete
.InsertAfter Text:="Tutoriais"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=2).Range
.Delete
.InsertAfter Text:="Word 2003"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=3).Range
.Delete
.InsertAfter Text:="Word 2007"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=4).Range
.Delete
.InsertAfter Text:="Word 2010"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=5).Range
.Delete
.InsertAfter Text:="VBA"
End With
End If
End Sub
Veja o resultado:
Considerações Finais:
Se o documento possuir mais tabelas elas serão referenciadas como: .Tables(1), .Tables(2), .Tables(3)... e assim sucessivamente, conforme o número de tabelas que o documento possui.
Row:=1 - refere-se a primeira linha da tabela; Row:=2 – refere-se a segunda linha da tabela e assim sucessivamente, conforme o número de linhas da tabela.
Column:=1 – refere-se a primeira coluna da tabela; Column:=2 – refere-se a segunda coluna da tabela e assim sucessivamente, conforme o número de colunas da tabela.
A linha de Código “If ActiveDocument.Tables.Count >= 1 Then” verifica se o documento possui uma ou mais tabelas. Você pode criar uma rotina de tratamento de erro e/ou exibir uma mensagem ao usuário para o caso de não haver tabelas no documento.
Veja no código abaixo:
Sub inserirtexto2()
If ActiveDocument.Tables.Count >= 1 Then
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
.Delete
.InsertAfter Text:="Tutoriais"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=2).Range
.Delete
.InsertAfter Text:="Word 2003"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=3).Range
.Delete
.InsertAfter Text:="Word 2007"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=4).Range
.Delete
.InsertAfter Text:="Word 2010"
End With
With ActiveDocument.Tables(1).Cell(Row:=1, Column:=5).Range
.Delete
.InsertAfter Text:="VBA"
End With
Else
MsgBox "Não há tabelas no documento", vbOKOnly, "Informação ao usuário"
End If
End Sub
Caso não haja nenhuma tabela no documento a mensagem abaixo será exibida.
Gostou? Se quiser mais eu tenho um e-Book sobre VBA que você pode se interessar.
Confira aqui