Função VBA do Excel e Sub
A diferença entre um função e um sub em Excel VBA é que uma função pode retornar um valor enquanto um sub não pode. Funções e subs tornam-se muito úteis à medida que o tamanho do programa aumenta.
Função
Se você quiser que o Excel VBA execute uma tarefa queretorna um resultado, você pode usar uma função. Coloque uma função em um módulo (no Editor do Visual Basic, clique em Inserir, Módulo). Por exemplo, a função com nome Area.
Area = x * y
End Function
Explicação: Esta função tem dois argumentos (do tipo Double) e um tipo de retorno (a parte depois de As também do tipo Double). Você pode usar o nome da função (Área) em seu código para indicar o resultado que deseja retornar (aqui x * y).
Agora você pode se referir a esta função (em outras palavras chamar a função) de algum outro lugar em seu código simplesmente usando o nome da função e dando um valor para cada argumento.
Coloque um botão de comando em sua planilha e adicione as seguintes linhas de código:
z = Area(3, 5) + 2
MsgBox z
Explicação: A função retorna um valor, então você tem que "pegar" esse valor em seu código. Você pode usar outra variável (z) para isso. Em seguida, você pode adicionar outro valor a essa variável (se quiser). Finalmente, exiba o valor usando uma MsgBox.
Resultado quando você clica no botão de comando na folha:
Sub
Se você quiser que o Excel VBA execute algumas ações, você pode usar um sub. Coloque um sub em um módulo (no Editor do Visual Basic, clique em Inserir, módulo). Por exemplo, o sub com nome Area.
MsgBox x * y
End Sub
Explicação: Este sub tem dois argumentos (do tipo Double). Não tem um tipo de retorno! Você pode se referir a este sub (chame o sub) de algum outro lugar em seu código simplesmente usando o nome do sub e dando um valor para cada argumento.
Coloque um botão de comando na sua planilha e adicione a seguinte linha de código:
Resultado quando você clica no botão de comando na folha:
Você pode ver a diferença entre a funçãoe o sub? A função retornou o valor 15. Adicionamos o valor 2 a este resultado e exibimos o resultado final. Quando chamamos o sub, não temos mais controle sobre o resultado (15) porque um sub não pode retornar um valor!