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 2 3 |
[modificador] Sub ExemploSub([parâmetros]) ' corpo do código End Sub |
| 1 2 3 4 5 |
[modificador] Function ExemploFunction([parâmetros]) As [tipo] ' corpo do código 'valor de retorno ExemploFunction = [valor] End Function |
| 1 2 3 |
Public Function SomaSimplesF(x As Long, y As
Long) As Long SomaSimplesF = x + y End Function |
| 1 2 3 4 5 6 7 |
Public Sub TestaSomaSimplesF() Dim soma As Long 'chama a função SomaSimplesF e atribui o resultado à variável soma soma = SomaSimplesF(1, 2) 'mostra o resultado em uma caixa de mensagem MsgBox soma End Sub |
| 1 2 3 |
Public Sub SomaSimplesS(x As Long, y As Long) MsgBox = x + y End Sub |
| 1 2 3 4 |
Public Sub TestaSomaSimplesF() 'Faz a chamada a Sub SomaSimplesF Call SomaSimples(1, 2) 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