Os loops repetem as instruções várias vezes e podem economizar muito tempo.
Os seguintes tipos de loops existem em Excel VBA:
O código a seguir insere uma sequência de números em cada célula da coluna A (de 1 a 12):
Sub while_loop() Cells(1, 1) = 1 Cells(2, 1) = 2 Cells(3, 1) = 3 Cells(4, 1) = 4 Cells(5, 1) = 5 Cells(6, 1) = 6 Cells(7, 1) = 7 Cells(8, 1) = 8 Cells(9, 1) = 9 Cells(10, 1) = 10 Cells(11, 1) = 11 Cells(12, 1) = 12 End Sub
Esse código é muito repetitivo...
Imagine se tivéssemos que inserir números consecutivos em centenas de células em vez de apenas 12... Agora você entende porque os loops são tão úteis.
Vamos dar um exemplo de ciclo vazio While:
Sub while_loop() While [doença] 'Instruções Wend End Sub
Enquanto a condição for verdadeira, as instruções no loop continuarão a ser executadas (mas tome cuidado para não criar um loop infinito).
Abaixo está a macro de loop discutida anteriormente, transformada em um loop While:
Sub while_loop() Dim num As Integer num = 1 'O número inicial (neste caso, é o número da linha e o valor que está sendo definido) While num <= 12 'Contanto que a variável num seja menor ou igual a 12, as instruções serão executadas Cells(num, 1) = num 'Numeração num = num + 1 'O número é incrementado em 1 cada vez que o loop passa Wend End Sub
Usando esse loop em uma macro, tudo o que teríamos que fazer se precisássemos de 400 fitas em vez de 12 seria substituir 12 por 400.
Existe outra maneira de escrever um loop que funciona da mesma forma que While Wend (executando enquanto uma determinada condição contida no comando While for verdadeira):
Sub do_while_loop() Do While [doença] 'Instruções Loop End Sub
A versão a seguir mostra que a condição pode ser escrita no final do loop Do Loop, o que significa que as instruções serão executadas exatamente pelo menos uma vez:
Sub do_while_loop() Do 'Instruções Loop While [doença] End Sub
Em vez de fazer um loop enquanto a condição é cumprida, também podemos sair do loop por condição se substituirmos While por Until:
Sub do_while_loop() Do Until [doença] 'Instruções Loop End Sub
Sub for_loop() For i = 1 To 5 'Instruções Next End Sub
O loop For será repetido aqui 5 vezes.
Cada vez que este ciclo é repetido, a variável i é automaticamente aumentada em 1:
Sub for_loop() For i = 1 To 5 MsgBox i Next End Sub
É possível sair do loop For antecipadamente usando a seguinte instrução:
Exit For 'Sair do loop For
Vamos considerar um exemplo que mostrará isso claramente:
Sub for_loop() Dim max_loops As Integer max_loops = Range("A1") 'Na célula A1, especificamos o limite para o número de repetições For i = 1 To 7 'Número esperado de ciclos: 7 If i > max_loops Then 'Se a célula A1 estiver vazia ou contiver um número menor que 7, reduza o número de repetições Exit For 'Se a condição anterior for TRUE, então a saída do loop For...loop End If MsgBox i Next End Sub
Outros operadores Exit:
Exit Do 'Saída de loop Do Loop
Exit Sub 'Sair do procedimento
Exit Function 'Função de saída