Você sabe o que são as estruturas de controle no VBA? Caso você não saiba, elas são responsáveis por ditar o ritmo da execução de um algoritmo. Ou seja, através da utilização das estruturas de controle, as linhas de código do programa não necessariamente serão executadas de maneira linear.

Essa não linearidade permite que os programadores de VBA criem rotinas flexíveis, capazes de solucionar até mesmo os problemas mais complexos.

Uma maneira simples de saber se será necessário a utilização de estruturas de controle é olhar para as variáveis que estarão contidas na macro, e se fazer as seguintes perguntas:

  • Alguma delas deverá mudar de comportamento em função de alguma regra do negócio?
  • Essa regra é apenas condicional?
  • Ocorrerá apenas em determinadas circunstâncias, ou quando ocorrer ela deverá ser repetida até que a outra regra seja atendida?

Se para alguma dessas perguntas você respondeu sim, você está diante da necessidade da utilização de uma estrutura de controle no VBA.

 

Os tipos de estrutura de controle

 

Basicamente, no Visual Basic for Applications existem dois tipos de estruturas de controle: as que direcionam o fluxo de acordo com uma condição; e as que repetem determinada tarefa por um determinado número de vezes até que também seja atendida uma condição.

Na tabela abaixo, trazemos algumas estruturas, assim como seus tipos de atuação. 

 

Tipos de estrutura de controle.

 

A seguir, iremos te explicar o funcionamento de todas essas estruturas de controle no VBA. Fique aqui com a gente e continue aprendendo!

 

Estruturas de controle condicional 

 

Esse tipo de estrutura é responsável pela realização de árvores de decisão. Pode-se fazer uma analogia com as funções SE, CONT.SE, SOMASE entre tantas outras. Através desse tipo de controle, as instruções são executadas condicionalmente, ou seja, se uma condição for verdadeira, teremos uma sequência de instruções e, se for falsa, teremos outra.

 

IF-THEN-ELSE

 

A função IF tem a finalidade de analisar equações lógicas colocadas no primeiro parâmetro. Caso a comparação lógica seja verdadeira, então (THEN), realiza operações localizadas no segundo parâmetro. Caso contrário (ELSE), realiza as operações do terceiro parâmetro.

 

Teste de condição IF-THEN-ELSE

 

É interessante ressaltar que o uso da palavra ELSE é opcional. No caso de sua não utilização, a avaliação negativa do algoritmo será removida, neste caso implicando na saída automática do IF.

Trazemos um exemplo que irá esclarecer melhor suas dúvidas, confira!

O exemplo trata-se de um controle de faturamento de um determinado supermercado. Esse código tem a finalidade de informar se a meta mensal desejada foi alcançada ou não. Caso o valor de faturamento mensal inserido seja maior ou igual a R$ 100.000,00, a meta foi alcançada.

 

Exemplo faturamento supermercado

 

Quando fazemos a execução da macro, a seguinte janela é mostrada ao usuário:

 

Qual o faturamento mensal?

 

Caso o valor digitado esteja dentro da meta a seguinte caixa de mensagem é mostrada:

 

Parabéns! Você atingiu a meta.

 

Caso contrário, teremos a seguinte caixa de texto: 

 

Infelizmente você não atingiu a meta.

 

ElseIf

 

É considerada uma estrutura condicional adicional, pois ela permite a criação de mais do que apenas duas hipóteses (verdadeiro ou falso). 

No VBA é possível adicionar estruturas condicionais dentro de outras estruturas condicionais. 

A vantagem desse tipo de construção é a criação de instruções de controle mais complexas, ondes muitos parâmetros devem ser levados em consideração.

Para inserir uma estrutura condicional dentro de outra, é utilizada a palavra reservada ElseIf. Confira o esquemático abaixo: 

 

Esquemático ElseIF

 

Diagrama de blocos ElseIF

 

É muito importante ter em mente que estamos tratando de uma estrutura exclusiva, ou seja, apenas as opções consideradas como verdadeiras são executadas.

No exemplo a seguir, é demonstrada a aplicação do ElseIf no sistema de controle de pesagem de caminhões.

A pesagem máxima da carga um caminhão deve ser de 5000 kg. Caso a balança informe um valor inferior, teremos capacidade ociosa. Se for igual teremos toda capacidade de carga do caminhão aproveitada. Se for superior, deverá ser paga uma multa de R$ 9,50 por kg excedido.

 

Exemplo controle de pesagem

 

Após executar a linhas de código, teremos a seguinte caixa de diálogo:

 

Introduza o valor da pesagem do caminhão:

 

Vamos supor que, na pesagem, a balança registrou 5235 kg. Logo, a nossa Macro retornará a seguinte mensagem: 

 

Peso em excesso

 

Essa estrutura pode ser utilizada em outros inúmeros casos, trouxemos aqui apenas uma aplicação corriqueira em um ambiente industrial.

 

Estruturas de controle repetitivo

 

Também conhecidas como ciclos, permitem a repetição de um dado trecho do código de execução o número de vezes que for necessário.

Existem inúmeros tipos de ciclos no VBA, no entanto, eles são diferenciados de acordo com a forma de como é controlada a execução das instruções contidas no corpo do ciclo.

De forma genérica, pode-se dizer que uma estrutura de controle repetitiva garante a execução repetida de um determinado conjunto de dados, dependendo do resultado do teste de uma determinada condição de funcionamento.

 

FOR-NEXT 

 

Essa estrutura é baseada na existência de um contador, que incrementa de forma automática o conteúdo da variável-contador, chamada de variável de controle do ciclo.

No início, o contador vai conter o valor inicial, que é definido pelo programador. A cada ciclo executado, o contador é incrementado, e quando essa variável atingir um determinado valor especificado, as repetições são finalizadas, fazendo com que o programa prossiga para as próximas instruções.

Confira o esquemático abaixo:

 

Esquemático FOR-NEXT

 

O programador deve especificar qual o valor de início e fim, ou seja, até quando a estrutura continuará funcionando e quais as instruções que o ciclo deverá repetir. O conteúdo da estrutura de controle do ciclo pode ser utilizado por meio de instruções contidas no algoritmo do ciclo, mas não deve ser modificado por essas instruções, pois isso acarretaria perdas de funcionalidades do ciclo.

Confira, a seguir, um exemplo da utilização do FOR-NEXT. Através dele, é possível o cálculo da potência de qualquer número.

 

Exemplo FOR-NEXTExemplo FOR-NEXT

WHILE-END

 

Essa estrutura se assemelha muito ao FOR, porém, só possui uma restrição. Ela também fará a repetição das instruções entre o WHILE (declaração da estrutura) e o WEND 

(encerramento da estrutura). No entanto, somente enquanto uma condição estipulada for verdadeira. Quando a condição testada retornar “falso”, a sub-rotina continua na linha após o WEND.

 

Esquemático WHILE-END

 

Diagrama de blocos

 

A seguir, temos um exemplo de uma Macro que simula uma loteria viciada. Ela informa quantas vezes o usuário jogou até inserir o número correto.

 


Enquanto o número sorteado não for igual ao número inserido pelo usuário, o sorteio continua, contabilizando, assim, o número de tentativas.

 

DO-LOOP

 

Essa estrutura de repetição é muito similar ao WHILE-WEND, porém, fornece duas possibilidades extras:

  • Permite posicionar a condição de teste no início ou no fim do loop; 
  • Permite especificar se o loop vai acontecer enquanto (WHILE) uma expressão for verdadeira ou até (UNTIL) que a condição seja verdadeira.

 

Esquemático Do-Loop

 

Diagrama de blocos


 

Um exemplo muito comum é a utilização de um contador em planilhas para nomear o número dos clientes presentes em um cadastro, o número de produtos no estoque, entre outras coisas.

 

Exemplo cadastro de clientes

 

Estrutura de seleção condicional SELECT-CASE

 

Enquanto no IF temos apenas condições de “verdadeiro” ou “falso”, na estrutura SELECT-CASE podemos ampliar nosso horizonte ilimitadamente. Nele apenas especificamos o elemento a ser comparado, então, para cada caso, definimos as ações correspondentes.

 

Esquemático SELECT-CASE



Poderíamos substituir o ElseIf na macro que efetuava o controle da pesagem de caminhões pelo SELECT-CASE. Confira! 

 

Exemplo pesagem de caminhões
 

Estrutura de controle FOR-EACH-NEXT

 

Essa com certeza pode ser considerada a estrutura de controle mais importante no VBA. Ela permite que possamos executar uma determinada instrução em todos os elementos de um conjunto de objetos, ou em todos os elementos de um Array.

Esta estrutura, quando aplicada em Arrays, não funciona para a atualização dos valores, mas somente para a extração do seu conteúdo. No entanto, quando aplicada em um conjunto de objetos, pode ser utilizada para a alteração de suas propriedades ou extração de valores.

 

Esquemático FOR-EACH-NEXT

 

No exemplo a seguir, é criado um array para que sejam imputados os 5 melhores clientes do dia e, em seguida, esses clientes serão mostrados em uma caixa de texto para registro.

 

Exemplo FOR-EACH-NEXT
 

E aí, bora aprender com a gente?

 

Agora que você sabe o que é e para que servem as estruturas de controle no VBA, chegou a hora de se aprofundar mais nessa ferramenta tão importante no contexto atual.

Para te ajudar com isso, nós, da Voitto, separamos um material que vai te tornar um especialista no assunto.

Confira o nosso curso de VBA aplicado aos negócios. Através dele, você aprenderá mais de 30 recursos e comandos para a criação de sistemas automatizados, além disso, o curso conta com mais de 20 exemplos práticos.

Não perca essa oportunidade, clique no botão abaixo e se inscreva!

 

 

Ah, já ia me esquecendo! Não deixe de enviar seu feedback, ele é muito importante para nós.