VBA – Tabelas e ListObjects

Written by

Mel Jenkins

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on July 1, 2023

Este tutorial demonstrará como trabalhar com Tables e ListObjects no VBA.

Tabelas e ListObjects do VBA

As tabelas são um dos recursos mais úteis e poderosos do Excel. Neste tutorial, veremos como usar o VBA para criar uma tabela, adicionar uma classificação simples a uma tabela, filtrar uma tabela e executar outras tarefas relacionadas a tabelas.

Criar uma Tabela com o VBA

O método ListObjects.Add pode adicionar uma tabela a uma planilha, com base em um intervalo dessa planilha. Temos o intervalo mostrado em ($A$1:$B$8) em uma planilha chamada Planilha1.

produto vendas tabela

O código a seguir adicionará uma tabela chamada Tabela1 à sua planilha, com base no intervalo ($A$1:$B$8), usando o Table Style padrão:

Sub CriarTabelaEmExcel()

ActiveWorkbook.Sheets("Planilha1").ListObjects.Add(xlSrcRange, Range("$A$1:$B$8"), , xlYes).Name = _
"Tabela1"

End Sub

O resultado é:

tabela criada

Inserção de uma Coluna no Final da Tabela com VBA

Você pode usar o método ListColumns.Add para adicionar uma coluna ao final da tabela. Temos uma tabela chamada Tabela1 mostrada abaixo.

tabela criada

Você pode adicionar uma coluna à sua tabela usando o código a seguir, que sempre adicionará uma coluna ao final da tabela:

Sub AdicionarColunaAoFinalDaTabela()

ActiveWorkbook.Sheets("Planilha1").ListObjects("Tabela1").ListColumns.Add

End Sub

O resultado é:

coluna adicionada tabela

Inserção de uma Linha na Parte Inferior da Tabela com o VBA

Você pode usar o método ListRows.Add para adicionar uma linha à parte inferior da tabela. Temos uma tabela chamada Tabela1 mostrada abaixo.

tabela criada

O código a seguir sempre adicionará uma linha à parte inferior da tabela.

Sub AdicionarLinhaParteInferiorTabela()

ActiveSheet.ListObjects("Tabela1").ListRows.Add

End Sub

O resultado é:

adicionar linha inferior

Adição de uma Classificação Simples com o VBA

Você pode classificar uma tabela com o VBA. Temos uma tabela chamada Tabela1 mostrada abaixo e podemos usar o VBA para classificar a coluna Vendas da menor para a maior.

tabela criada

O código a seguir classificará a coluna Sales em ordem crescente.

Sub ClassificacaoSimpleDaTabela()

Range("Tabela1[[#Headers],[Vendas]]").Select
ActiveWorkbook.Worksheets("Planilha1").ListObjects("Tabela1").Sort.SortFields.Clear
ActiveWorkbook.Worksheets("Planilha1").ListObjects("Tabela1").Sort.SortFields.Add _
Key:=Range("Tabela1[[#All],[Vendas]]"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal

With ActiveWorkbook.Worksheets("Planilha1").ListObjects("Tabela1").Sort

.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply

End With

End Sub

O resultado é:

tabela classificada

Filtrar uma Tabela com VBA

Você também pode filtrar uma tabela do Excel usando o VBA. Temos uma tabela chamada Tabela1 e gostaríamos de filtrá-la para que apenas as vendas superiores a 1.500 sejam exibidas.

tabela criada

Podemos usar o método Autofilter, que tem cinco parâmetros opcionais. Como gostaríamos de filtrar a coluna Vendas, que é a segunda coluna, definimos o campo como 2 e usamos o parâmetro do operador xlAnd, que é usado para datas e números.

Sub FiltroSimples()

 ActiveWorkbook.Sheets("Planilha1").ListObjects("Tabela1").Range.AutoFilter Field:=2, Criteria1:= _
 ">1500", Operator:=xlAnd

End Sub

O resultado é:

tabela filtrada

Limpar o Filtro com o Método ShowAllData no VBA

Você pode acessar o método ShowAllData da classe Worksheet para limpar o filtro. Se quiser limpar o(s) filtro(s) de uma tabela, primeiro será necessário selecionar uma célula na tabela, o que pode ser feito no VBA.

O método ShowAllData gerará um erro se não for usada a lógica condicional para verificar se foi aplicado um filtro na planilha. O código a seguir mostra como fazer isso:

Sub LimpandoFiltro()

Range("Tabela1[[#Headers],[Vendas]]").Select
If ActiveWorkbook.Worksheets("Planilha1").FilterMode = True Then
ActiveSheet.ShowAllData

End If

End Sub

Limpar Todos os Filtros de uma Tabela do Excel

Você pode acessar o método ShowAllData da classe ListObject sem precisar selecionar uma célula na tabela primeiro. O código a seguir mostra como fazer isso:

Sub LimpandoTodosFiltros()
ActiveWorkbook.Worksheets("Planilha1").ListObjects("Tabela1").AutoFilter.ShowAllData
End Sub

Exclusão de uma Linha com o VBA

Você pode excluir uma linha do conjunto de dados da tabela usando o método ListRows.Delete. É necessário especificar a linha usando o número da linha. Temos a seguinte tabela chamada Tabela1.

tabela criada

Digamos que você queira excluir a segunda linha da tabela, o código a seguir permitirá que você faça isso:

Sub ApagarUmaLinha()

ActiveWorkbook.Worksheets("Planilha1").ListObjects("Tabela1").ListRows(2).Delete

End Sub

O resultado é:

tabela apagada linha dois

Exclusão de uma Coluna com o VBA

Você pode excluir uma coluna de sua tabela usando o método ListColumns.Delete. Temos a seguinte tabela, chamada Tabela1, mostrada abaixo:

tabela criada

Para excluir a primeira coluna, você usaria o seguinte código:

Sub ExcluirUmaColuna()

ActiveWorkbook.Worksheets("Planilha1").ListObjects("Tabela1").ListColumns(1).Delete

End Sub

O resultado é:

somente coluna vendas

Conversão de uma Tabela de Volta em um Intervalo no VBA

Você pode converter uma tabela de volta em um intervalo normal usando o VBA. O código a seguir mostra como converter uma tabela chamada Tabela1 de volta em um intervalo:

Sub ConverterTabelaParaIntervalo()

ActiveWorkbook.Sheets("Planilha1").ListObjects("Tabela1").Unlist

End Sub

Adição de Colunas Zebradas e Formatação a Todas as Tabelas em uma Planilha usando o VBA

Você pode acessar todas as tabelas de sua planilha usando a coleção ListObjects. Na planilha abaixo, temos duas tabelas e gostaríamos de adicionar uma coluna zebrada a ambas as tabelas de uma só vez e alterar a fonte da seção de dados de ambas as tabelas para negrito, usando o VBA.

duas tabelas empregados

Sub AdicionandoColunaZebrada()

Dim tbl As ListObject
Dim sht As Worksheet

Set sht = ThisWorkbook.ActiveSheet

For Each tbl In sht.ListObjects
tbl.ShowTableStyleColumnStripes = True
tbl.DataBodyRange.Font.Bold = True
Next tbl

End Sub

O resultado é:

adicionar coluna zebrada

Criação de uma Tabela no Access em VBA usando DoCmd.RunSQL

Uma das principais maneiras de criar uma tabela no Access em VBA é usar o método DoCmd.RunSQL para executar uma consulta de ação com uma instrução SQL.

Temos um botão em nosso formulário de exemplo e, quando clicamos no botão, gostaríamos de criar uma tabela chamada TabelaDeProdutos com dois campos ou colunas, um seria o campo de chave primária chamado IDProduto e o outro seria um campo chamado Vendas.

formulario exemplo

Para criar essa tabela, usaríamos o seguinte código:

Private Sub cmdCriarTabelaProdutos_Click()

DoCmd.RunSQL "CREATE TABLE TabelaDeProdutos " _
& "(IDProduto INTEGER PRIMARY KEY, Vendas Integer);"

End Sub

O resultado é:

access tabela produtos

Filtragem de uma Tabela no Access Usando VBA

Você também pode filtrar uma tabela no Access usando o método DoCmd.ApplyFilter. Temos nossa tabela simples mostrada abaixo no Access, chamada TabelaDeProdutos.

Gostaríamos de pressionar este botão em nosso formulário e ver apenas as vendas maiores que 1500.

botao vendas grandes

Para isso, usaríamos o seguinte código para fazer isso:

Private Sub cmdFiltro_Click()

DoCmd.OpenTable "TabelaDeProdutos"

DoCmd.ApplyFilter , "[Vendas]>1500"

End Sub

O resultado é:

access tabela filtrada

vba-free-addin

Exemplos de Add-ins de Códigos VBA

Acesse facilmente todos os exemplos de código que se encontram em nosso site.

Simply navigate to the menu, click, and the code will be inserted directly into your module. .xlam add-in.

(Nenhuma instalação necessária!)

Baixe de Graça

Retornar aos Exemplos de Códigos VBA