Estruturas De Repetição Do VBA – For, Do, While, E For Each Qual Usar?

Se você é um programador de Visual Basic, certamente já ouviu falar sobre as estruturas de repetição do vba. Caso ainda seja um completo iniciante, fique sabendo que em algum momento você irar precisar desses eventos.

Nesse artigo irei apresentar 4 estruturas de repetição que uso em meus projetos. Para uma noção geral sobre todas as estruturas de repetição VBA, deixarei esse link para complemento do artigo. Recomendo que você leia e aumente sua base de conhecimento a respeito das estruturas de repetição do vba.

Estruturas De Repetição Do VBA – O Que é, Quando E Qual Delas Usar?

Mas do que somente entender as estruturas de repetição, o programador precisa saber quando e qual delas usar. Essa dúvida é muito frequente entre centenas de programadores vba, mas fique tranquilo você não estar sozinho.

Mas a final o que é estrutura de repetição?

As estruturas de repetição também são conhecidas como laços (loops). São utilizados para executar repetidamente uma instrução, ou bloco de instrução enquanto determinada condição for verdadeira.

No mundo da programação não existe um regra que te obriga a usar as estruturas de repetição. Mas haverá momentos em que você sentirá a necessidade de atribuir essas funções em seus projetos, tipo por exemplo:

  • Preencher Caixas de Listagem
  • Percorrer Por Um RecordSet
  • Verificar Registros Do DataBase
  • Limpar Caixas de Textos

Essas são algumas das formas distintas de se trabalhar com as estruturas de repetição, isso em qualquer linguagem de programação. Claro que com o tempo você descobrira novas necessidades, por isso é importante estudar a fundo sobre essas funções.

Nesse artigo nós iremos falar sobre quatro estruturas de repetição do vba, e elas são:

  • Do While
  • For Next
  • For Each
  • Do Until

Mostraremos exemplos práticos em que você pode aplicar esses eventos, afim de tornar seus aplicativos mais produtivos. Na programação vba os eventos de repetição que mais utilizo são; Do Until, For Next e o For Each.

Estruturas De Repetição Do VBA – Do While

A primeira estrutura é o Do While, talvez por ser a mais simples de entender. A tradução de Do While é Faça Enquanto, ou seja, irá executar enquanto uma condição for verdadeira. Vejamos um exemplo simples do código:

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif1

Para o exemplo mostrado criamos basicamente uma Sub Contador, e dentro dessa sub criamos uma variável Contar. Definimos que essa variável é do tipo Inteira e que deve receber valores de 1 até 10. Observe que, enquanto o valor de nossa variável não é maior que 10, o evento Do While continua fazendo o loop sempre adicionando + 1 em nossa variável.

Se você analisar o evento novamente com atenção, verá que temos uma pequena diferença no valor final da variável.  Note que declaramos uma condição que se o valor fosse menor ou igual a 10, o loop deveria parar de contar. Mais na prática isso só aconteceu, quando nossa variável recebeu um valor maior do que 10.

Mas como pode?; eu disse para contar até que fosse menor ou igual a 10?

Imagine que você tenha em seu projeto uma caixa de combinação(ComboBox) e que ela só pode receber numerações de 1 a 10. Para o exemplo mostrado “não seria ideal usar o Do While“. Isso porque nós definimos os operadores < e =, sendo assim, o Do While só encerrara o loop quando minha variável for maior que 10.

Isso acontece porque o Do While faz o loop enquanto a condição é verdadeira. Ou seja, se o máximo de loops é de 10x, e minha condição enquanto Contar for menor ou igual a 10, não tem jeito ele vai adicionar +1 . Certamente isso poderia ser resolvido de 3 formas; ou eu removeria o operador = da minha condição, ou definiria ao invés do número 10 o 9.

Ou se não faria assim:

Mas isso é muito relativo, depende do projeto em que você estará implementando a rotina. Estou citando esses pequenos detalhes, para que você entenda mais sobre a estrutura de repetição Do While.

Veja Que Interessante Esse Exemplo Com O Do While:

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif2

Nesse exemplo utilizei a mesma sub Contar para aplicar uma rotina, que consiste em localizar critérios de minha tabela.

Como você pode reparar na imagem a cima, existem 31 registros no meu intervalo. A função do meu loop foi buscar nesse intervalo, quais pessoas teriam a idade menor ou igual a de 14 anos.  Sendo assim o programa marcaria quais seriam os registros na planilha, retornando as informações para a janela de verificação imediata do Visual Basic.

Você poderia adaptar essa rotina em uma solução, que visaria controlar o pagamento de seus clientes. É claro que podemos melhorar muito mais essa rotina, espero que você entenda a base disso tudo.

Estruturas De Repetição – Evento For Next

Outra estrutura de repetição é o For… Next. É uma estrutura mais apropriada quando há variável de controle, como nos exemplos anteriores. Vejamos como fica o mesmo código anterior usando o For… Next:

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif3

Ao contrário das estruturas de repetição Do… Loop, em For… Next a variável de controle é inicializada na própria estrutura, bem como o incremento. Não é necessário adicionar 1 à variável Contar porque o laço já faz isso automaticamente. Contar receberá valores de 1 a 10 e a estrutura será encerrada ao final da décima execução.

Em um exemplo simples, você poderia usar o For Next para preencher uma caixa de combinação dessa forma:

Se você também observar nesse exemplo, a variável final recebeu uma diferença de 1. Porem ao contrário do evento Do While, o copilador só adicionaria na caixa de combinação valores que estão dentro da condição. Você com certeza irá utiliza-lo muito para fazer diversos tipos de ações como por exemplo,  preencher itens de um listbox:

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif4

Estruturas De Repetição – Evento Do Until

O Do Until também é muito usado no mundo dos programadores, essa é uma das funções que mais utilizo em meus projetos. A tradução de Do Until é; Faça Até, ou seja, irá executar até que a condição seja verdadeira, exemplo:

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif5

O Do until executa até que a condição seja verdadeira, nesse caso é preciso definir o operador (=) . Caso contrário, ele só terminará o loop após minha variável ser maior que 10. A muito a ser fazer com o Do Until, geralmente o utilizo para gerar relatórios ou até mesmo para verificar critérios em um tabela do excel. A seguir eu irei montar um pequeno exemplo que consiste no seguinte:

A rotina a seguir possui estruturas de condições, logo é preciso que você tenha uma noção básica de algorítimos.

Imagine que você tenha vários nomes cadastrados na coluna (A) de sua planilha. E que precise criar um loop para encontrar em qual linha da planilha estar registrado um determinado nome. Para esse exemplo buscaremos pelo nome de PEDRO, retornando a informação para a janela de verificação imediada do VBA.

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif6

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif7

Estruturas De Repetição – Entendendo Essa Rotina

vNome recebe a String que deverá ser encontrada, aqui  ela representou o critério PEDRO!

No exemplo nós criamos uma Sub que se chama EncontrarNome, essa sub possui duas variáveis linhaPlan e vNome. A variável linhaPlan recebe um número inteiro, esse número representa a linha da planilha que o loop dará inicio a contagem.

Usando o Do until estou dizendo para meu compilador contar até que a ultima linha da minha planilha COLUNA (“A”) seja igual a vazia. Dessa forma eu consigo percorre pela tabela localizando o critério buscado.

Depois que definimos em qual coluna o loop deve percorrer, adicionamos algumas condições onde:

  • Se Verdadeiro Faça – Sim PEDRO estar cadastrado na linha 7
  • Se Falso Faça – PEDRO não estar cadastrado na linha e linhaPlan

Se nossa condição for verdadeira, o loop é encerrado exibindo o critério na janela. Sendo falso, devemos definir o comando a seguir para o compilador buscar pela próxima linha da planilha veja:

Com essa rotina você pode criar um controle de acesso de forma muito avançada. Onde o compilador através do loop verifica se o usuário existe na base de dados, permitindo trabalhar com múltiplos usuários.

Nada que te impeça de fazer o mesmo com o Do While, isso foi só um pequeno exemplo…

Note também que esse loop é muito parecido com o que criamos no começo do artigo utilizando o Do While. A diferença entre os dois é que, o Do While possui o controle de variável já o Do Until nesse contexto não.

Se observar na rotina de verificação de idades, notará que o Do While só faz 31 loops no máximo. Com isso “seria impossível” verificar uma tabela que tem mais de 31 registros. Pois o loop só percorrera 31x dentro de um determinado intervalo, isso de certa forma limitaria nosso trabalho em algumas atividades.

Mas Porque Não Acontece O Mesmo Com O Do until?

Muito simples, pois o segredo dessa condição estar na linha de código a seguir:

Foi o mesmo que dizer para o compilador: Faça até que minha planilha (“TabelaNomes”) e sua coluna (A) seja igual a vazia. Em outras palavras eu mandei meu loop continuar até encontrar a ultima linha vazia do meu intervalo.

Eu poderia ter feito a mesmo com o Do While, porem quis mostrar as diferenças entre controle de variáveis. É importante ressaltar que isso pode ser um grande problema, se o intervalo estiver vazio antes do fim do loop.

EXEMPLO:  se você pretende percorrer por um intervalo que tem 100 registros, e a linha de número 50 for fazia já era. Pois o compilador entenderá que ali é o final do intervalo, então sera preciso melhorar essa rotina.

Estar com dúvidas? Comente o artigo que irei te ajudar! 😀

Estruturas De Repetição – Evento For Each

Por fim, temos a estrutura For Each… Next, que é específica para trabalhar com coleções de objetos e arrays. For Each significa Para Cada, ou seja, executa o processamento para cada objeto que houver em uma coleção ou para cada item em um array.

Nesse exemplo irei usar o For Each para mostrar na janela de verificação, os registros de minha tabela pessoa veja:

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif8

Com o For Each nós podemos realizar centenas de atividades que facilitam muito nosso trabalho. Eu particularmente gosto muito de usar esse evento para limpar as caixas de texto de meu UserForm, segue o código:

Você também pode usar o For Each para listar registros de um intervalo para listbox. Seguindo o exemplo anterior, criei uma rotina em For Each para preencher o listbox com os dados da minha tabela pessoa:

Estruturas de repetição do VBA - For, Do, While, e for Each qual usar? gif9

O rotina para preenche o listbox com o For Next, utilizando o For Each basicamente faz a mesma coisa. Porem com O For Each, eu conseguir adaptar de forma que ele adicione as linhas automaticamente sem necessidade de fazer:

Esse código pode facilitar muito sua vida, caso você tenha mais de 50 colunas a serem adicionadas em seu listbox. Embora todos saibam que o listbox só aceita no máximo 10 colunas, na pratica é possível contornar essa limitação! 😉

→Clique nesse link e saiba como adicionar mais de 10 colunas no listbox!

Estruturas De Repetição – Conclusão Final

As estruturas de repetição quase sempre estarão presentes em nossos programas, por isso é importante domina-las. Isso fara com que você ganhe mais tempo e produtividade na hora de realizar determinadas tarefas.

Esse post abordou de uma forma simples cada evento, e suas fórmulas básicas. As estruturas de repetição do vba são de possibilidades infinitas, só depende de você para implementa-las em seu programa!

Espero que tenham gostado, não se esqueçam de compartilhar o artigo com seus amigos! 😀

Até mais!

Leita também sobre:

Sobre o Autor

Welisson Silva
Welisson Silva

Analista de Sistemas, trabalha com TI desde 2014. Especializado em Vendas Online, desenvolvedor, programador, guitarrista e entusiasta de tudo que envolva tecnologia.