As Diferenças Entre Sub e Function VBA

Fazer download em pdf ou txt
Fazer download em pdf ou txt
Você está na página 1de 3

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 é, 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. 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

1 [modificador] Sub ExemploSub([parâmetros])


2 ' corpo do código
3 End Sub

Function

1 [modificador] Function ExemploFunction([parâmetros]) As


[tipo]
2 ' corpo do código
3 'valor de retorno
4 ExemploFunction = [valor]
5 End 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:

1
Public Function SomaSimplesF(x As Long, y As
2
Long) As Long
3
SomaSimplesF = x + y
End Function

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:

1 Public Sub TestaSomaSimplesF()


2 Dim soma As Long
'chama a função SomaSimplesF e atribui o
3 resultado à variável soma
4 soma = SomaSimplesF(1, 2)
5 'mostra o resultado em uma caixa de mensagem
6 MsgBox soma
7 End Sub

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

Public Sub SomaSimplesS(x As Long, y As


1
Long)
2
MsgBox = x + y
3
End Sub

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:

1 Public Sub TestaSomaSimplesF()


2 'Faz a chamada a Sub SomaSimplesF
3 Call SomaSimples(1, 2)
4 End Sub

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 modificados 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.

Tomás Vásquez

Você também pode gostar