Vba for loop (para o próximo, para cada)
Pontos chave
- Os loops VBA For são tipos de loop fixo.
- Não é possível usar um desses loops ao gravar uma macro .
Para o próximo ciclo
VBA FOR NEXT é um loop fixo que usa um contador para executar iterações. Em termos simples, você precisa especificar o número de vezes que deseja executar o loop e, quando atingir esse número de loops, ele irá parar automaticamente. É por isso que é um loop fixo e mais popular entre os desenvolvedores VBA.
Sintaxe
Aqui está a sintaxe do loop VBA For Next:
For counter = Start To End [Step stepsize] [statements] Next [counter]
- Contador : É uma variável que armazena o número de repetições e aumenta seu valor a cada repetição. Por exemplo, se o loop estiver na quinta iteração, o valor do contador será cinco e, quando o loop executar a instrução para a quinta iteração, o valor do contador mudará para seis.
- Start : É uma variável numérica que armazena o valor inicial do contador.
- End : É uma variável numérica que armazena o valor final do contador.
- Tamanho do passo : esta variável especifica um grande aumento ou diminuição no valor do contador. Por padrão, o tamanho do passo é um, mas você também pode usar qualquer valor positivo ou negativo.
- Instrução : Este é um conjunto de código que você deseja executar em cada iteração do loop For Next.
- Próximo : Esta é a instrução final para uma iteração do loop e usa o valor do contador para dizer ao VBA para repetir o loop e quando o contador atingir o valor final, ele encerra o loop.
Exemplo para entender para o próximo loop
Para entender como usá-lo no próximo loop, vamos escrever um código simples para adicionar números de série em uma coluna.
Deixe-me elaborar um pouco mais: Precisamos escrever um código que possa ir da célula selecionada para as próximas 10 células, uma por uma, e adicionar números de série apenas no instantâneo abaixo.
Para usar o For Next Loop, você pode seguir as seguintes etapas:
- Primeiro, você precisa declarar uma variável que possa usar para armazenar o valor do contador.
- A seguir, precisamos atribuir o valor do contador à variável.
- Agora é hora de escrever o código para o loop, então na primeira linha você precisa usar a variável contador e definir os valores inicial e final. Aqui neste código você tem a variável ‘i’ como valor final.
- A partir daí, você precisa escrever um código que possa adicionar os números de série à célula ativa e depois passar para a próxima célula. À medida que o valor do contador aumenta a cada iteração, você pode usá-lo para inserir o número de série na célula ativa e depois disso você pode usar o shift para mover a seleção para a próxima célula abaixo.
- No final, use a próxima palavra-chave e a variável contador para completar o código do loop.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
Você pode ver no instantâneo abaixo, quando executo este código, ele começa na célula selecionada inserindo um número de série e depois passa para a próxima célula em cada iteração.
Como você sabe, For Next é um loop fixo e neste código, quando você atribui um valor numérico, ele diz ao VBA para executar o loop esse número de vezes.
E você pode ver o instantâneo abaixo que tirei na segunda iteração do loop onde o valor da variável do contador “i” é dois.
O que estou tentando enfatizar é que a variável count altera seu valor a cada iteração e insere esse valor na célula ativa; em seguida, a mudança ativa a próxima célula abaixo, o que completa uma iteração.
No final, a palavra-chave “Next” é VBA para retornar à primeira linha do loop e repeti-lo. Como você viu na sintaxe For Next, você também pode usar um valor de etapa no loop para operar o contador com base nisso.
Portanto, se você usar dois como valor da etapa, o código será semelhante ao seguinte.
Sub AddSerialNumbers() Dim i As Integer i = 10 For i = 1 To i Step 2 ActiveCell.Value = i ActiveCell.Offset(1, 0).Activate Next i End Sub
E quando você executar esse código, haverá na atividade algo como o snapshot abaixo.
Quando você usa um valor de etapa (como a etapa 2, usada no código acima), o VBA ignora cada segunda iteração no loop e, como você pode ver, você tem cinco números com a diferença de um em cada número.
Nota : No exemplo acima, você usou ‘i’ como variável de contador, mas também pode usar um nome diferente conforme sua conveniência.
Para cada loop subsequente
VBA FOR EACH NEXT é um loop fixo que pode percorrer todos os objetos em uma coleção. Em For Each Next, você não precisa especificar o número de iterações. Em vez disso, você pode especificar uma coleção de objetos e ela poderá iterar por todos esses objetos, um por um.
Por exemplo : se você deseja navegar por todas as células de um intervalo. Neste caso o intervalo é a coleção e as células são os objetos que você possui.
Sintaxe
Aqui está a sintaxe VBA para cada loop subsequente:
For Each Object In Collection [statements] Next [object]
- Objeto : representa o único objeto na coleção de objetos pelo qual você está fazendo um loop. A cada iteração, passa de um objeto para outro.
- Coleção : Esta é uma coleção de objetos pelos quais você deseja percorrer.
- Instrução : Linha(s) de código que você deseja executar em cada loop em todos os objetos da coleção.
- Próximo : Esta é a instrução final de uma iteração do loop e diz ao VBA para passar para o próximo objeto na coleção.
Exemplo para entender o loop For Each Next
Para entender o loop For Each Next, vamos escrever um código para ocultar todas as planilhas, exceto a planilha ativa. Este código irá verificar o nome de cada planilha e combiná-lo com o nome da planilha ativa e ocultá-lo se não corresponder.
Para usar o loop For Each Next, você pode seguir as seguintes etapas:
- Primeiro, você precisa declarar uma variável para usar como planilha.
- Depois disso, use a palavra-chave “For Each”, depois a variável “mySheet” para a planilha e use “ActiveWorkbook.Worksheets” para a coleção de planilhas da pasta de trabalho ativa.
- Em seguida, você precisa usar a instrução VBA IF para testar se o nome da planilha que está atualmente nesta iteração do loop NÃO É IGUAL à planilha ativa e, se esta condição for verdadeira, ocultar a planilha que está agora no loop iteração.
- No final, você tem a palavra-chave NEXT e “mySheet” a variável para completar o código do loop.
Código final:
Sub Hide_Other_Sheets() Dim mySheet As Worksheet For Each mySheet In ActiveWorkbook.Worksheets If mySheet.Name <> ActiveSheet.Name Then mySheet.Visible = False End If Next mySheet End Sub
Quando você executa esse código , ele percorre cada planilha da pasta de trabalho ativa e corresponde seu nome ao da planilha ativa e, se o nome da planilha não corresponder ao nome da planilha ativa, ele o faz. mascarar.
Desta forma, todas as planilhas ficarão ocultas.