VBA – Exemplos de For Each (Referência Rápida)
In this Article
Este tutorial mostrará exemplos de uso do loop For Each no VBA. Clique aqui para saber mais sobre loops em geral.
Loop For Each
O loop For Each permite percorrer cada objeto em uma coleção:
- Todas as células em um intervalo
- Todas as planilhas em uma pasta de trabalho
- Todas as pastas de trabalho abertas
- Todas as formas em uma planilha
- Todos os itens em uma matriz
- e muito mais!
For Each: Exemplos básicos
Estes exemplos demonstrarão como configurar loops For Each para percorrer diferentes tipos de objetos.
Loop Através de Células
Esse procedimento percorrerá cada célula do intervalo A1:A10, definindo a célula à sua direita como igual a ela mesma.
Sub ForEachCelula()
Dim Cell As Range
For Each Cell In Sheets("Planilha1").Range("A1:A10")
Cell.Offset(0, 1).value = Cell.value
Next Cell
End Sub
Loop Através de Planilhas
Esse procedimento percorrerá cada planilha em uma pasta de trabalho, exibindo cada planilha.
Sub ForEachPlanilhas()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = True
Next ws
End Sub
Loop Através de Pastas de Trabalho
Esse procedimento percorrerá cada Workbook, fechando cada uma delas.
Sub ForEachArquivos()
Dim wb As Workbook
For Each wb In Workbooks
wb.Close
Next wb
End Sub
Loop Através de Formas
Esse procedimento percorrerá cada forma da Planilha1, excluindo cada uma delas.
Sub ForEachForma()
Dim Shp As Shape
For Each Shp In Sheets("Planilha1").Shapes
Shp.Delete
Next Shp
End Sub
Loop Através de Gráficos
Esse procedimento percorrerá cada gráfico da Planilha1, excluindo cada um deles.
Sub ForEachGraficos()
Dim cht As ChartObject
For Each cht In Sheets("Planilha1").ChartObjects
cht.Delete
Next cht
End Sub
Loop Através de Tabelas Dinâmicas
Esse procedimento percorrerá cada tabela dinâmica da Planilha1, limpando cada uma delas
Sub ForEachTabelasDinamicas()
Dim pvt As PivotTable
For Each pvt In Sheets("Planilha1").PivotTables
pvt.ClearTable
Next pvt
End Sub
Loop Através de Tabelas
Este procedimento percorrerá cada tabela da Planilha1, excluindo cada uma delas.
Sub ForEachTabelas()
Dim tbl As ListObject
For Each tbl In Sheets("Planilha1").ListObjects
tbl.Delete
Next tbl
End Sub
Loop Através de Itens em uma Matriz
Esse procedimento percorrerá cada item de uma matriz e exibirá cada valor em uma caixa de mensagem,
Sub ForEachItemMatriz()
Dim arrValue As Variant
Dim Item As Variant
arrValue = Array("Item 1", "Item 2", "Item 3")
For Each Item In arrValue
MsgBox Item
Next Item
End Sub
Loop Através de Números
Este procedimento percorrerá cada número em uma matriz e exibirá cada valor em uma caixa de mensagem,
Sub ForEachNumeroEmNumeros()
Dim arrNumber(1 To 3) As Integer
Dim num As Variant
arrNumber(1) = 10
arrNumber(2) = 20
arrNumber(3) = 30
For Each num In arrNumber
Msgbox num
Next num
End Sub
Criador de Loops For Each
Os exemplos deste artigo foram criados com o Loop Builder em nosso suplemento VBA: AutoMacro.
O Loop Builder facilita muito a geração de código para fazer loop em objetos. O AutoMacro também contém muitos outros geradores de código, uma extensa biblioteca de códigos e poderosas ferramentas de codificação.
For Each – If
Você também pode usar instruções If dentro de loops para testar se os objetos atendem a determinados critérios, executando ações apenas nos objetos que atendem a esses critérios. Aqui está um exemplo de looping em cada célula de um intervalo:
Para Cada Célula no Intervalo – If
Sub LoopComIf()
Dim Cell as Range
For Each Cell In Range("A2:A6")
If Cell.Value > 0 Then
Cell.Offset(0, 1).Value = "Positivo"
ElseIf Cell.Value < 0 Then
Cell.Offset(0, 1).Value = "Negativo"
Else
Cell.Offset(0, 1).Value = "Zero"
End If
Next Cell
End Sub
Exemplos Comuns de For Each
Fechar Todas as Pastas de Trabalho
Esse procedimento fechará todas as pastas de trabalho abertas, salvando as alterações.
Sub FecharTodasPastas()
Dim wb As Workbook
For Each wb In Workbooks
wb.Close SaveChanges:=True
Next wb
End Sub
Ocultar Todas as Planilhas
Esse procedimento oculta todas as planilhas.
Sub OcultarTodasPlanilhas()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = xlSheetHidden
Next ws
End Sub
Reexibir Todas as Planilhas
Esse procedimento exibirá todas as planilhas.
Sub ReexibirTodasPlanilhas()
Dim ws As Worksheet
For Each ws In Sheets
ws.Visible = xlSheetVisible
Next ws
End Sub
Proteger Todas as Planilhas
Esse procedimento protegerá todas as planilhas.
Sub ProtegerTodasPlanilhas()
Dim ws As Worksheet
For Each ws In Sheets
ws.Protect Password:="..."
Next ws
End Sub
Desproteger Todas as Planilhas
Esse procedimento desprotegerá todas as planilhas.
Sub DesprotegerTodasPlanilhas()
Dim ws As Worksheet
For Each ws In Sheets
ws.Unprotect Password:="..."
Next ws
End Sub
Excluir Todas as Formas em Todas as Planilhas
Esse procedimento excluirá todas as formas em uma pasta de trabalho.
Sub ExcluirTodasFormasEmTodasPlanilhas()
Dim Sheet As Worksheet
Dim Shp As Shape
For Each Sheet In Sheets
For Each Shp In Sheet.Shapes
Shp.Delete
Next Shp
Next Sheet
End Sub
Atualizar Todas as Tabelas Dinâmicas
Este procedimento atualizará todas as tabelas dinâmicas em uma planilha.
Sub AtualizarTodasTabelasDinamicas()
Dim pvt As PivotTable
For Each pvt In Sheets("Planilha1").PivotTables
pvt.RefreshTable
Next pvt
End Sub
Uso do For Each no Access VBA
O loop For Each funciona da mesma forma no Access VBA e no Excel VBA. O exemplo a seguir removerá todas as tabelas do banco de dados atual.
Sub RemoverTodasTabelas()
Dim tdf As TableDef
Dim dbs As Database
Set dbs = CurrentDb
For Each tdf In dbs.TableDefs
DoCmd.DeleteObject tdf.Name
Loop
Set dbs = Nothing
End Sub