VBA – Exemplos de For Each (Referência Rápida)

Written by

Editorial Team

Reviewed by

Steve Rynearson

Translated by

Daniel Caramello

Last updated on May 23, 2023

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.

vba loop builder

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

loop com if

 

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