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

Utilizando a instrução GoTo para redirecionar a execução em uma macro

Cavalcante Consultores > Biblioteca de Excel > Utilizando a instrução GoTo para redirecionar a execução em uma macro

O que é?

Além das estruturas de controle de fluxo disponíveis no Excel (como If ... Then e While ... Wend), você pode controlar o fluxo de execução em uma macro através da instrução goto. Esta instrução redireciona a execução da macro para uma linha qualquer do código, identificada através de um nome dado (comumente chamado de label, do inglês "rótulo"), efetivamente pulando para este ponto da rotina.

A instrução goto é considerada uma alternativa pouco nobre às estruturas de controle de fluxo genuínas. A principal crítica ao seu uso é que ele promove código difícil de entender e manter, com uma dispersão desnecessária, que pode ser evitada através de programação estruturada e do uso de estruturas de controle de fluxo.

Exemplo

No exemplo abaixo, utilizaremos goto com a instrução On Error para redirecionar a execução de um código prestes a gerar um erro. Observe a rotina abaixo:

Function INVERTER1(d As Double)
    INVERTER1 = 1 / d
End Function

A função personalizada INVERTER1 recebe como parâmetro um número qualquer, e devolve o inverso deste número. Suponha que a função receba o valor zero: sem um controle de erros, ela gerará um erro na instrução INVERTER1 = 1 / d, já que a divisão por zero não está definida. Para evitar isto, vamos reformular esta função utilizando goto e devolvendo o valor zero caso não seja possível calcular o inverso do número fornecido. Observe:

Function INVERTER2(d As Double)
    
    On Error GoTo Erro
    INVERTER2 = 1 / d
    Exit Function

Erro:
    INVERTER2 = 0
    
End Function

Esta versão modificada da função devolverá zero se ocorrer qualquer erro entre a instrução On Error GoTo Erro e o seu término. Ao fornecermos zero como valor de entrada de INVERTER2, portanto, o erro na linha que calcula o quociente vai fazer com que a execução da função seja redirecionada para o rótulo Erro, que devolverá um valor conveniente para a função.

Observe o resultado da aplicação de ambas as funções:

Pratique!