Ir para o conteúdo
  • Cursos
  • Sobre
  • Conteúdo
  • Eventos
  • Contato
Menu
  • Cursos
  • Sobre
  • Conteúdo
  • Eventos
  • Contato
pedir orçamento
BLOG

VBA – Artigo 010 – Estruturas de repetição

 

Estruturas de repetição

O VBA fornece seis formas de estrutura de repetição. Quatro delas
são variantes das duas básicas (Do… Loop e For… Next), mas ainda assim são formas distintas de estrutura de
repetição.

A primeira estrutura que costuma-se ensinar é o
Do While… Loop, 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 de código:

Sub NumeroLinha()


    Dim Linha As Integer
    Linha = 1


    Do While Linha <= 10
        Cells(Linha, 1).Value = Linha
        Linha = Linha + 1
    Loop


End Sub

O código acima colocará o número da linha na primeira coluna da
linha 1 até a 10. Na estrutura de repetição temos uma condição que
define até quando a estrutura será executada (Linha <=
10). O laço será executado enquanto “Linha for menor ou igual
a 10″. Assim que a variável Linha assumir um valor superior,
o laço deixará de ser executado.

Perceba que a variável foi inicializada com o valor 1 antes da
estrutura de repetição. Se ela fosse inicializada com um valor
superior a 10 a execução sequer entraria no laço
Do While… Loop. Faça uma alteração no código, inicialize
com 11 e teste, utilizando a depuração (tecla F8).

Há casos em que precisamos executar o laço pelo menos uma vez antes
verificar a condição. Neste caso podemos usar a variante
Do… Loop While. A diferença no código é a posição do
While e a condição. Alterando o código anterior
teremos:

Sub NumeroLinha()


    Dim Linha As Integer
    Linha = 1    Do
        Cells(Linha, 1).Value = Linha
        Linha = Linha + 1
    Loop While Linha <= 10


End Sub

Executando o código veremos que o resultado é exatamente o mesmo da
primeira versão do código. Qual a diferença então? A diferença é que
a condição está sendo testada no final do laço, não no começo. Para
entendermos melhor o que isso significa, vamos inicializar a
variável Linha com o valor 11 e testar o código. Desta vez o
laço foi executado uma vez e o valor 11 apareceu na décima primeira
linha.

Como pode-se perceber, há diferença entre testar a condição no
começo ou no final do laço. Testando ao final do laço garante pelo
menos uma execução do processo. Há casos em que isso é necessário,
assim como há casos em que só deve executar quando a condição for
verdadeira. Cabe ao desenvolvedor perceber qual é a necessidade e
codificar de acordo. Na maioria dos casos a condição é testada
antes, o teste ao final costuma ser em casos bem específicos.

Temos também a estrutura Do Until… Loop, cuja tradução é
Faça Até. Enquanto o Do While executa
enquanto a condição seja
verdadeira, o Do Until executa
até que a condição seja
verdadeira. Compreendeu a diferença? Veja o mesmo código anterior
adaptado e perceba a diferença na forma de escrever a
condição:


Sub NumeroLinha()


    Dim Linha As Integer
    Linha = 1
    
    Do Until Linha > 10
        Cells(Linha, 1).Value = Linha
        Linha = Linha + 1
    Loop


End Sub

A condição passou a ser Linha > 10. Traduzindo o código
teremos a frase: “faça até que Linha tenha um valor maior que
10″. Em termos lógicos, é exatamente o oposto da condição
Linha <=10. Da mesma forma que temos o
Do… Loop While, também temos o
Do… Until Loop:


Sub NumeroLinha()


    Dim Linha As Integer
    Linha = 1
    
    Do
        Cells(Linha, 1).Value = Linha
        Linha = Linha + 1
    Loop Until Linha > 10


End Sub

Faça o mesmo teste de inicializar Linha com 11 e veja que o
resultado é o mesmo obtido com Do… Loop While.

Quando usar Do While ou Do Until? Isso vai depender
da necessidade do momento e da forma que você compreender melhor o
código. Você pode optar por usar somente um deles, mas é importante
conhecer os dois para o caso de precisar dar manutenção em código de
outras pessoas. Se você utiliza outras linguagens de programação
deve saber que algumas têm somente While ou
Until.

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:


Sub NumeroLinha()


    Dim Linha As Integer


    For Linha = 1 To 10
        Cells(Linha, 1).Value = Linha
    Next Linha


End Sub

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 Linha porque o laço já faz isso automaticamente. Linha receberá
valores de 1 a 10 e a estrutura será encerrada ao final da décima
execução.

Nas estruturas Do… Loop podemos alterar o incremento
alterando o valor para 2, por exemplo. A linha do incremento ficaria
assim:


        Linha = Linha + 2

Na estrutura For… Next, adicionamos um parâmetro chamado
Step (passo em inglês):


    For Linha = 1 To 10 Step 2

Podemos editar o loop de incremento para decremento. Na estrutura
For… Next isso é feito em apenas uma linha:


    For Linha = 10 To 1 Step -1


Desta maneira a execução irá de 10 para 1, decrementando 1 a cada
execução. Nas estruturas Do… Loop precisamos alterar a
linha com a inicialização da variável, bem como a do incremento,
passando para decremento. Por fim, precisamos mexer na condição
também, para que reflita a alteração para decremento.

As estruturas Do… Loop demandam mais atenção, pois caso o
código dentro da estrutura não permitir a saída do laço, o código
será executado indefinidamente até que o Excel trave e interrompa a
execução. Por essa razão é melhor que quem esteja iniciando na
programação use a estrutura For… Next, que é menos propensa
a erros.

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. O código abaixo gera o mesmo resultado
dos anteriores:

Sub NumeroLinha()


    Dim Celula As Range
    Dim Intervalo As Range
    Set Intervalo = Range(“A1:A10”)
    
    For Each Celula In Intervalo
        Celula.Value = Celula.Row
    Next


End Sub

A variável Intervalo foi inicializada para conter as células
entre A1 e A10. Por ser um objeto (do tipo Range), essa
variável deve ser inicializada usando o comando Set. A
estrutura For Each… Next percorre cada célula individual da
coleção (um intervalo é uma coleção de células) e preenche o
conteúdo da célula com o número da linha.

Vimos as seis estruturas de repetição disponíveis no VBA. Tirando o
For Each… Next que é específico para coleções de objetos e
arrays, as outras podem ser escolhidas de acordo com a
necessidade ou mesmo pela sua compreensão do funcionamento. Eu
recomendo que faça testes e exercícios com cada uma delas para
praticar e conhecer melhor cada uma. Use a depuração (tecla F8) para
executar passo a passo que ajuda a entender o funcionamento.

Pedro Martins

 

Formado em Tecnologia em Eletrônica Digital, já trabalhou como
artefinalista, eletrotécnico, programador de CLP (para máquinas
industriais) e analista de sistemas em sistema bancário,
programando em COBOL.
Mexe com computadores e programação desde a segunda metade dos
anos 1980, quando teve um MSX e aprendeu a programar em BASIC. É
a favor da disseminação do conhecimento.


 
 

 

Catálogo de aulas (NOVIDADE)
 
Criei um catálogo de aulas para ajudar você em seus estudos. Acesse clicando na imagem abaixo ou clique aqui.
 

 

 

 

 

 

Contato

Telefone:

+55 11 98861.4882

E-mail:

contato@alessandrotrovato.com.br

Siga-nos

Facebook Instagram Linkedin Twitter Youtube

© Copyright 2024 – Todos os direitos reservados | Alessandro Trovato

criado por: