Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
As instruções For Each...Next repetem um bloco de instruções para cada objeto em uma coleção ou cada elemento em uma matriz . O Visual Basic define automaticamente uma variável cada vez que o loop é executado. Por exemplo, o procedimento a seguir adiciona 10 ao valor de cada célula no intervalo A1 a A10.
Sub Add10ToAllCellsInRange()
Dim rng As Range
For Each rng In Range("A1:A10")
rng.Value = rng.Value + 10
Next
End Sub
O seguinte código faz loop em todos os elementos de uma matriz e define o valor de cada um para o da variável de índice I.
Sub SetArrayValue()
Dim TestArray(10) As Integer, I As Variant
For Each I In TestArray
TestArray(I) = I
Next I
End Sub
Fazer loop em um intervalo de células
Use um loop For Each...Next para fazer loop nas células de um intervalo. O procedimento a seguir faz um loop no intervalo A1:D10 na Planilha1, definindo como 0 (zero) qualquer número cujo valor absoluto seja menor que 0,01.
Sub RoundToZero()
For Each rng in Range("A1:D10")
If Abs(rng.Value) < 0.01 Then rng.Value = 0
Next
End Sub
Sair de um loop For Each...Next antes da conclusão
É possível sair de um loop For Each...Next usando a instrução Exit For. Por exemplo, quando ocorre um erro, use a instrução Exit For no bloco da instrução True de uma instrução If...Then...Else ou de uma instrução Select Case que verifica especificamente o erro. Se o erro não ocorrer, a instrução If…Then…Else será False e o loop continuará a ser executado conforme o esperado.
O exemplo a seguir testa a primeira célula no intervalo A1:B5 que não contém um número. Se tal célula for encontrada, será exibida uma mensagem e Exit For sairá do loop.
Sub TestForNumbers()
For Each rng In Range("A1:B5")
If IsNumeric(rng.Value) = False Then
MsgBox "Cell " & rng.Address & " contains a non-numeric value."
Exit For
End If
Next rng
End Sub
Use um loop For Each...Next para iterar uma classe VBA
Para cada... Os próximos loops não iteram apenas em matrizes e instâncias do objeto Collection . O loop For Each...Next também podem iterar através de uma classe VBA que você escreveu.
A seguir está um exemplo que demonstra como fazer isso.
Criar um módulo de classe no VBE (Editor do Visual Basic) e o renomeie CustomCollection. cc1
Adicione o seguinte código no módulo recém-criado.
Private MyCollection As New Collection ' The Initialize event automatically gets triggered ' when instances of this class are created. ' It then triggers the execution of this procedure. Private Sub Class_Initialize() With MyCollection .Add "First Item" .Add "Second Item" .Add "Third Item" End With End Sub ' Property Get procedure for the setting up of ' this class so that it works with 'For Each...' ' constructs. Property Get NewEnum() As IUnknown ' Attribute NewEnum.VB_UserMemId = -4 Set NewEnum = MyCollection.[_NewEnum] End Property
Exporte este módulo para um arquivo e o armazene no local.cc2
Após exportar o módulo, abra o arquivo exportado usando um editor de texto (o software do Bloco de notas do Windows deve ser o suficiente). O conteúdo do arquivo deve ter a seguinte aparência.
VERSION 1.0 CLASS BEGIN MultiUse = -1 'True END Attribute VB_Name = "CustomCollection" Attribute VB_GlobalNameSpace = False Attribute VB_Creatable = False Attribute VB_PredeclaredId = False Attribute VB_Exposed = False Private MyCollection As New Collection ' The Initialize event automatically gets triggered ' when instances of this class are created. ' It then triggers the execution of this procedure. Private Sub Class_Initialize() With MyCollection .Add "First Item" .Add "Second Item" .Add "Third Item" End With End Sub ' Property Get procedure for the setting up of ' this class so that it works with 'For Each...' ' constructs. Property Get NewEnum() As IUnknown ' Attribute NewEnum.VB_UserMemId = -4 Set NewEnum = MyCollection.[_NewEnum] End Property
Ao usar o editor de texto, remova o
'
caractere da primeira linha abaixo doProperty Get NewEnum() As IUnknown
texto no arquivo. Salve o arquivo modificado.No VBE, remova a classe criada no seu projeto VBA e opte por não exportá-lo quando solicitado.cc3
Importe o arquivo que você removeu o
'
caractere de volta para o VBE.cc4Execute o seguinte código para ver que você agora pode iterar através da classe VBA personalizada que escreveu usando o VBE e um editor de texto.
Dim Element Dim MyCustomCollection As New CustomCollection For Each Element In MyCustomCollection MsgBox Element Next
Notas de rodapé | Descrição |
---|---|
[cc1] | Você pode criar um módulo de classe escolhendo módulo de classe no menu inserir. Você pode renomear um módulo de classe modificando suas propriedades na janela Propriedades. |
[cc2] | Você pode ativar a caixa de diálogo Exportar arquivo ao escolher Exportar arquivo no menu Arquivo. |
[cc3] | Você pode remover um módulo de classe VBE ao selecionar Remover Item no menu arquivo. |
[cc4] | Você pode importar um arquivo externo do módulo de classe ao ativar a caixa de diálogo Importar Arquivo (escolha Importar Arquivo no menu Arquivo). |
Confira também
Suporte e comentários
Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.