As instruções de Loop Do While e Do Until servem para que um bloco de instruções seja executado enquanto as condições referentes à cada instrução sejam alcançadas.
Numa tradução literal do inglês para o português as instruções podem ser entendidas da seguinte forma:
Do While = Faça enquanto
Do Until = Faça até
A sintaxe das duas instruções é a mesma, porém sua lógica é diferente
Do While "Teste condição"
Bloco de instruções
Loop
Do Until "Teste condição"
Bloco de instruções
Loop
Como pode-se reparar, a única diferença entre as duas instruções são as Palavras chave While e Until.
Agora vamos ver as respectivas lógicas das instruções.
O Loop While será executado sempre que o Teste de condição retornar um valor Verdadeiro
Dim aValor As Integer
aValor = 0
Do While aValor < 4 'enquanto for verdadeira
MsgBox a
aValor = aValor + 1
Loop
MsgBox "Fim"
No exemplo acima, a variável aValor começa com o valor 0 e a cada rodada do loop, seu valor é acrescido de 1.
O teste de condição verifica se aValor é menor do que 4, caso seja menor ( verdadeira ), o loop continua, caso contrário ele é finalizado.
Ao contrário do While o Loop Until será executado sempre que o Teste de condição retornar um valor Falso
Dim aValor As Integer
aValor = 0
Do Until aValor > 4 'enquanto for Falsa
MsgBox a
aValor = aValor + 1
Loop
MsgBox "Fim"
No exemplo acima, a variável aValor começa com o valor 0 e a cada rodada do loop, seu valor é acrescido de 1.
O teste de condição verifica se aValor é maior do que 4, caso seja maior ( falsa ), o loop se encerra, caso contrário ele continua. Outro detalhe nesse tipo de loop, é onde desejamos fazer a verificação da condição. Podemos colocar logo após o DO ou então após o LOOP.
Esse detalhe tem que ser usado com cautela, pois pode prejudicar de alguma forma os resultados do seu projeto.
Vejamos um exemplo da instrução While e passando de primeira um valor Falso para o teste de condição
Dim aValor As Integer
aValor = 0
Do While aValor > 4 'enquanto for verdadeira
MsgBox a
aValor = aValor + 1
Loop
MsgBox "Fim"
Nesse exemplo, o bloco de instruções não é executado, pois a condição já começa como Falsa ( a não é maior que 4 ) e o loop é encerrado
Porém se alterarmos o local do teste de condição e deixarmos após o Loop, o bloco de instruções será executado uma vez.
Dim aValor As Integer
aValor = 0
Do
MsgBox a
aValor = aValor + 1
Loop While aValor > 4 'enquanto for verdadeira
MsgBox "Fim"