Cavalcante Consultores – treinamento e consultoria em finanças e Excel

Saindo do controle de fluxo - comando Exit

Cavalcante Consultores > Biblioteca de Excel > Saindo do controle de fluxo - comando Exit

O que é?

A instrução Exit sai de um bloco de código Do…Loop, For...Next, Function, Sub ou Property.

>Estrutura:

Fornece um meio de sair de uma instrução Do...Loop. Pode ser usada somente dentro de uma instrução Do...Loop. Exit Do transfere o controle para a instrução seguinte à instrução Loop. Quando usada dentro de instruções Do...Loop aninhadas, Exit Do transfere o controle para o loop que está aninhado em um nível acima do loop onde ocorre Exit Do.

Fornece um meio de sair de um loop For. Pode ser usada somente em um loop For...Next ou For Each...Next. Exit For transfere o controle para a instrução seguinte à instrução Next. Quando usada dentro de loops For aninhados, Exit For transfere o controle para o loop que está aninhado em um nível acima do loop onde ocorre Exit For.

Sai imediatamente do procedimento Function em que aparece. A execução continua com a instrução seguinte à instrução que chamou Function.

Sai imediatamente do procedimento Property em que aparece. A execução continua com a instrução seguinte à instrução que chamou o procedimento Property.

Sai imediatamente do procedimento Sub em que aparece. A execução continua com a instrução seguinte à instrução que chamou o procedimento Sub.

Exemplo

Um exemplo útil para o uso das instruções Exit é no caso de um loop For...Next. Supondo que estivéssemos buscando um determinado valor dentro de uma coleção de itens de 10 posições. A alternativa mais comum é verificar a lista item a item comparando-os até que encontrar o item que se deseja. Caso o item estivesse na 10º posição, não haveria tanto problemas. Mas se ele estivesse na 2º posição, porque continuar o executando o código até a 10º posição se já achamos o item?

Veja o código abaixo:

O código declara uma matriz de tamanho 10 com nomes de pessoas e todas as suas posições. Passando um nome por parâmetro, a função retorna VERDADEIRO se o nome existir na lista e FALSO caso contrário. A matriz é preenchida entre as linhas 7 e 16 e a busca é feita em uma laço For...Next nas linhas 18 a 23.

A variável quantInteracoes foi criada para verificar quantas vezes o laço For...Next do código faz interações, esta quantidade é mostrada numa caixa de mensagem na linha 25.

Para testar a função, em qualquer célula de sua planilha e digite =ProcuraNome("João"). Veja que a função retorna o valor VERDADEIRO, o que significa que o nome consta na lista. Se informar qualquer outro nome, por exemplo, "Sérgio", a função retornará FALSO. Note que independente do nome informado, exista ele ou não na lista, uma caixa de mensagem com a quantidade 10 sempre. Isso significa que, mesmo que o laço encontre o nome na primeira posição, ele continua executando o laço até a última posição. Se a lista contivesse 1000 nomes, o código ficaria muito demorado.

Mas como apenas queremos saber se o nome existe na lista, não há necessidade de continuar executando o laço quanto a condição da linha 20 for atendida. Então, veja a modificação feita no código:

Adicionando a cláusula Exit For como feito no código acima, ao atender a condição da linha 20, o código sairá do laço For...Next e continuará a execução na linha 24. Depois de fazer a modificação, em qualquer célula de sua planilha digite: =ProcuraNome("João"). Veja que ao invés do valor 10, a caixa de mensagem mostrará 1. Se colocar =ProcuraNome("Maria"), a caixa de mensagem apresentará 2 e assim por diante.

Além de evitarmos trabalho desnecessário, aumentamos a performance da função para a maior parte dos casos em que ela for utilizada.

Comentários

Não confunda instruções Exit com instruções End. Exit não define o fim de uma estrutura.

Como a instrução Exit desvia a execução do código, é aconselhável usá-la somente se o código da função estiver bem estruturado, principalmente para os casos de Function e Sub.