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

As diferenças entre Sub e Function

Cavalcante Consultores > Biblioteca de Excel > As diferenças entre Sub e Function

Introdução

O VBA possui dois tipos de estruturas para construção de algoritmos: Sub e Function.

A questão que surge é a de quando usar uma ou outra na construção de nossos algoritmos em VBA no Excel? Na prática, Sub e Function trabalham da mesma forma com uma única diferença.Sub são funções de processamento autônomo enquanto as Functions podem (e devem) retornar valores no final de sua execução.

Veja a estrutura de cada uma:

Sub

Function

onde:

modificador são palavras chave que definem o nível de acesso à estrutura de código.

parâmetros são variáveis que são passadas na chamada da função e utilizadas dentro. Podem existir vários ou mesmo nenhum parâmetro.

tipo é o que informa o tipo de dado a ser retornado pela Function. Pode ser qualquer tipo de dados válido do VBA.

valor uma valor que representa o retorno da função. Pode ser uma variável ou um valor constante.

Como saber qual utilizar? Isto depende do contexto da sua aplicação. Quando sua rotina precisar simplesmente executar uma processamento sem emitir qualquer tipo de informação, é aconselhável usar uma Sub. Já quando seu processamento necessitar devolver algum resultado, sem dúvida uma Function é necessária. Supondo uma situação em que você precisa criar funções que executassem operações aritméticas, elas precisariam depois de efetuar os cálculos, devolver o resultado para ser utilizado.

Veja este exemplo:

O código efetua uma operação simples recendo duas variáveis do tipo Long como parâmetro e devolve também um Long (definido na construção da Function) através da chama SomaSimples na linha 2. Para testar as função, basta ir a uma célula da planilha e digitar =SomaSimplesF(1;3). É possível também testar a função através de código VBA, como no código abaixo:

Já se este exemplo fosse construído usando uma Sub, não seria possível diretamente retornar o valor como é feito na Function. O solução então seria mostrá-lo ao usuário, por exemplo, em uma caixa de mensagem. Veja este exemplo:

Para testar a função, é precisa criar outro bloco de código que faça a chamada a este. Crie a seguinte função para testar o SomaSimplesS:

Veja que o Sub não tem sequer a opção de mencionar o tipo de dado que pode ser retornado.

No Microsoft Excel, as Functions possuem uma característica especial. Elas podem ser usadas para criação de funções de planilha. A exigência para que isso seja possível, é criá-las com o modificador Public, que é o padrão caso seja omitido.

Dentro deste entendimento, uma Function sempre poderá assumir o papel de uma Sub, mas não o contrário. Também por isso, o Excel utiliza Functions para criação de funções de planilha personalizadas e Subs para gravação de Macros.

Para superar a limitação do retorno de um único valor ou mesmo conseguir retornar alguns valores em Subs, é necessária a utilização passagem de parâmetros por referência. Este assunto será discutido em outro texto.

Comentários

Alguns podem pensar que por segurança, é melhor sempre criar Functions ao invés de Subs. Porém, para termos de organização de código e padronização de suas rotinas em VBA, procure usar a estrutura correta para ter um bom funcionamento de seu aplicativo.