Este tutorial mostrará exemplos de uso do For Each Loop no VBA. Clique aqui para saber mais sobre loops em geral.
Para Cada Loop
O For Each Loop permite que você faça um loop através 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 mais!
Para cada um: exemplos básicos
Esses exemplos demonstrarão como configurar os loops For Each para percorrer diferentes tipos de objetos.
Loop Through Cells
Este procedimento percorrerá cada célula no intervalo A1: A10, configurando a célula para que seja igual a si mesma.
12345678 | Sub ForEachCell ()Dim Cell As RangePara cada célula nas planilhas ("Planilha1"). Intervalo ("A1: A10")Cell.Offset (0, 1) .value = Cell.valuePróxima CélulaEnd Sub |
Loop Through Sheets
Este procedimento percorrerá cada folha em uma pasta de trabalho, exibindo cada folha.
12345678 | Sub ForEachSheets ()Dim ws como planilhaPara cada ws nas folhasws.Visible = TruePróxima FolhaEnd Sub |
Percorrer as pastas de trabalho
Este procedimento percorrerá cada pasta de trabalho, fechando cada uma.
12345678 | Sub ForEachWorkbooks ()Dim wb como pasta de trabalhoPara cada wb nas pastas de trabalhowb.FecharPróximo wbEnd Sub |
Loop Through Shapes
Este procedimento percorrerá cada forma na Folha1, excluindo cada uma.
12345678 | Sub ForEachShape ()Dim Shp como formaPara cada envio nas folhas ("Folha1"). FormasShp.DeletePróximo ShpEnd Sub |
Loop Through Charts
Este procedimento percorrerá cada Gráfico na Folha1, excluindo cada um.
12345678 | Sub ForEachCharts ()Dim cht As ChartObjectPara cada cht em planilhas ("Planilha1"). ChartObjectscht.DeletePróximo chtEnd Sub |
Loop por meio de tabelas dinâmicas
Este procedimento percorrerá cada Tabela Dinâmica na Folha1, limpando cada uma
12345678 | Sub ForEachPivotTables ()Dim pvt como tabela dinâmicaPara cada pvt em folhas ("Folha1"). Tabelas dinâmicaspvt.ClearTablePróximo pvtEnd Sub |
Loop por meio de tabelas
Este procedimento percorrerá cada Tabela na Folha1, excluindo cada uma.
12345678 | Sub ForEachTables ()Dim tbl As ListObjectPara cada tbl em folhas ("Folha1"). ListObjectstbl.DeletePróximo tblEnd Sub |
Loop Through Items in Array
Este procedimento percorrerá cada item em um Array, exibirá cada valor em uma msgbox,
12345678910 | Sub ForEachItemInArray ()Dim arrValue As VariantDim item como variantearrValue = Array ("Item 1", "Item 2", "Item 3")Para cada item em um valorItem MsgBoxPróximo itemEnd Sub |
Loop Through Numbers
Este procedimento percorrerá cada número em um Array, exibirá cada valor em uma msgbox,
12345678910111213 | Sub ForEachNumberInNumbers ()Dim arrNumber (1 a 3) As IntegerDim num As VariantarrNumber (1) = 10arrNumber (2) = 20arrNumber (3) = 30Para cada número em arrNumberMsgbox NumPróximo numEnd Sub |
Para Cada Construtor de Loop
Os exemplos neste artigo foram construídos com o Loop Builder na nossa Suplemento VBA: AutoMacro.
o Loop Builder torna muito fácil gerar código para percorrer objetos. AutoMacro também contém muitos outros Geradores de código, um extenso Biblioteca de Código, e poderoso Ferramentas de codificação.
Para cada um - se
Você também pode usar instruções If dentro de loops para testar se os objetos atendem a certos critérios, realizando apenas ações nos objetos que atendem aos critérios. Aqui está um exemplo de loop através de cada célula em um intervalo:
Para cada célula no intervalo - se
1234567891011121314 | Sub If_Loop ()Dim Cell como RangePara cada célula no intervalo ("A2: A6")Se Cell.Value> 0 ThenCell.Offset (0, 1) .Value = "Positivo"ElseIf Cell.Value <0 ThenCell.Offset (0, 1) .Value = "Negativo"OutroCell.Offset (0, 1) .Value = "Zero"Fim sePróxima CélulaEnd Sub |
Para cada exemplo comum
Fechar todas as pastas de trabalho
Este procedimento fechará todas as pastas de trabalho abertas, salvando as alterações.
123456789 | Sub CloseAllWorkbooks ()Dim wb como pasta de trabalhoPara cada wb nas pastas de trabalhowb.Close SaveChanges: = TruePróximo wbEnd Sub |
Ocultar todas as planilhas
Este procedimento irá ocultar todas as planilhas.
12345678 | Sub HideAllSheets ()Dim ws como planilhaPara cada ws nas folhasws.Visible = xlSheetHiddenPróximo wsEnd Sub |
Reexibir todas as planilhas
Este procedimento irá exibir todas as planilhas.
12345678 | Sub UnhideAllSheets ()Dim ws como planilhaPara cada ws nas folhasws.Visible = xlSheetVisiblePróximo wsEnd Sub |
Proteja todas as planilhas
Este procedimento protegerá todas as planilhas.
12345678 | Sub ProtectAllSheets ()Dim ws como planilhaPara cada ws nas folhasws.Protect Password: = "…"Próximo wsEnd Sub |
Desproteger todas as planilhas
Este procedimento irá desproteger todas as planilhas.
12345678 | Sub UnprotectAllSheets ()Dim ws como planilhaPara cada ws nas folhasws.Unprotect Password: = "…"Próximo wsEnd Sub |
Excluir todas as formas em todas as planilhas
Este procedimento excluirá todas as formas em uma pasta de trabalho.
123456789101112 | Sub DeleteAllShapesOnAllWorksheets ()Dim Sheet As WorksheetDim Shp como formaPara cada ws nas folhasPara cada Shp em ws.ShapesShp.DeletePróximo ShpPróximo wsEnd Sub |
Atualizar todas as tabelas dinâmicas
Este procedimento atualizará todas as tabelas dinâmicas em uma planilha.
12345678 | Sub RefreshAllPivotTables ()Dim pvt como tabela dinâmicaPara cada pvt em folhas ("Folha1"). Tabelas dinâmicaspvt.RefreshTablePróximo pvtEnd Sub |
Usando For Each em Access VBA
O loop For Each funciona da mesma maneira no Access VBA e no Excel VBA. O exemplo a seguir removerá todas as tabelas do banco de dados atual.
123456789 | Sub RemoveAllTables ()Dim tdf As TableDefDim dbs como banco de dadosDefinir dbs = CurrentDbPara cada tdf em dbs.TableDefsDoCmd.DeleteObject tdf.NameCicloDefinir dbs = NothingEnd Sub |