Função VBA - Chamada, Valor de Retorno e Parâmetros

Este tutorial irá ensiná-lo a criar e usar funções com e sem parâmetros no VBA

O VBA contém uma grande quantidade de funções integradas para você usar, mas você também pode escrever as suas próprias. Ao escrever código em VBA, você pode escrevê-lo em um Sub Procedure ou Function Procedure. Um procedimento de função é capaz de retornar um valor ao seu código. Isso é extremamente útil se você deseja que o VBA execute uma tarefa para retornar um resultado. As funções VBA também podem ser chamadas de dentro do Excel, assim como as funções internas do Excel.

Criando uma função sem argumentos

Para criar uma função, você precisa definir a função dando um nome a ela. A função pode então ser definida como um tipo de dados indicando o tipo de dados que você deseja que a função retorne.

Você pode criar uma função que retorne um valor estático cada vez que for chamada - um pouco como uma constante.

123 Função GetValue () As IntegerGetValue = 50Função Final

Se você executasse a função, ela sempre retornaria o valor 50.

Você também pode criar funções que se referem a objetos no VBA, mas você precisa usar Definir palavra-chave para retornar o valor da função.

123 Função GetRange () como intervaloDefina GetRange = Range ("A1: G4")Função Final

Se você fosse usar a função acima em seu código VBA, a função sempre retornaria o intervalo de células A1 a G4 em qualquer planilha em que você esteja trabalhando.

Chamando uma função de um subprocedimento

Depois de criar uma função, você pode chamá-la de qualquer outro lugar em seu código usando um Sub Procedure para chamar a função.

O valor de 50 sempre será retornado.

Você também pode chamar a função GetRange de um Sub Procedure.

No exemplo acima, a função GetRange é chamada pelo procedimento Sub para colocar em negrito as células no objeto de intervalo.

Criação de funções

Argumento Único

Você também pode atribuir um parâmetro ou parâmetros à sua função. Esses parâmetros podem ser chamados de Argumentos.

123 Função ConvertKilosToPounds (dblKilo as Double) as DoubleConvertKiloToPounds = dblKilo * 2.2Função Final

Podemos então chamar a função acima a partir de um Sub Procedimento para calcular quantas libras é uma quantidade específica de quilos.

Uma função pode ser chamada a partir de vários procedimentos em seu código VBA, se necessário. Isso é muito útil porque evita que você tenha que escrever o mesmo código repetidamente. Também permite dividir procedimentos longos em pequenas funções gerenciáveis.

No exemplo acima, temos 2 procedimentos - cada um deles está usando a função para calcular o valor da libra dos quilos passados ​​a eles no dblKilo Argumento da função.

Argumentos Múltiplos

Você pode criar uma função com vários argumentos e passar os valores para a função por meio de um procedimento sub.

123 Função CalculateDayDiff (Date1 as Date, Date2 as Date) as DoubleCalculateDayDiff = Date2-Date1Função Final

Podemos então chamar a função para calcular a quantidade de dias entre 2 datas.

Argumentos Opcionais

Você também pode passar argumentos opcionais para uma função. Em outras palavras, às vezes você pode precisar do argumento e às vezes não - dependendo do código com o qual você está usando a função.

123456 Função CalculateDayDiff (Date1 as Date, Optional Date2 as Date) as Double'verifique a segunda data e, se não houver, torne a Data2 igual à data de hoje.Se Data2 = 0, então Data2 = Data'calcular diferençaCalculateDayDiff = Date2-Date1Função Final

Valor de argumento padrão

Você também pode definir o valor padrão dos argumentos opcionais ao criar a função, de modo que, se o usuário omitir o argumento, o valor que você colocou como padrão será usado em seu lugar.

1234 Função CalculateDayDiff (Date1 as Date, Optional Date2 as Date = "06/02/2020") as Double'calcular diferençaCalculateDayDiff = Date2-Date1Função Final

ByVal e ByRef

Quando você passa valores para uma função, você pode usar o ByVal ou ByRef palavras-chave. Se você omitir qualquer um deles, o ByRef é usado como padrão.

ByVal significa que você está passando uma cópia da variável para a função, enquanto ByRef significa que você está se referindo ao valor original da variável. Quando você passa uma cópia da variável (ByVal), o valor original da variável é NÃO alterado, mas quando você faz referência à variável, o valor original da variável é alterado pela função.

1234 Função GetValue (ByRef intA As Integer) As IntegerintA = intA * 4GetValue = intAFunção Final

Na função acima, o ByRef poderia ser omitido e a função funcionaria da mesma maneira.

1234 Função GetValue (intA As Integer) As IntegerintA = intA * 4GetValue = intAFunção Final

Para chamar esta função, podemos executar um subprocedimento.

123456789 Sub TestValues ​​()Dim intVal As Integer'preencher a variável com o valor 10intVal = 10'executa a função GetValue e mostra o valor na janela imediataDebug.Print GetValue (intVal)'mostra o valor da variável intVal na janela imediataDebug.Print intValEnd Sub

Observe que as janelas de depuração mostram o valor 40 ambas as vezes. Quando você passa a variável IntVal para a função - o valor de 10 é passado para a função e multiplicado por 4. Usar a palavra-chave ByRef (ou omiti-la por completo) irá ALTERAR o valor da variável IntVal. Isso é mostrado quando você mostra primeiro o resultado da função na janela imediata (40) e, em seguida, o valor da variável IntVal na janela de depuração (também 40).

Se NÃO quisermos alterar o valor da variável original, temos que usar ByVal na função.

1234 Função GetValue (ByVal intA As Integer) As IntegerintA = intA * 4GetValue = intAFunção Final

Agora, se chamarmos a função de um subprocedimento, o valor da variável IntVal permanecerá em 10.

Função de saída

Se você criar uma função que testa uma determinada condição, e uma vez que a condição for considerada verdadeira, você deseja retornar o valor da função, pode ser necessário adicionar uma instrução Exit Function em sua Function para sair da função antes você executou todo o código nessa função.

12345678910111213 Função FindNumber (strSearch As String) As IntegerDim i As Integer'faz um loop em cada letra da stringPara i = 1 para Len (strSearch)'se a letra for numérica, retorna o valor para a funçãoIf IsNumeric (Mid (strSearch, i, 1)) ThenFindNumber = Mid (strSearch, i, 1)'então saia da funçãoFunção de saídaFim sePróximoFindNumber = 0Função Final

A função acima fará um loop pela string fornecida até encontrar um número e, em seguida, retornará esse número da string. Ele só encontrará o primeiro número na string, pois então Saída a função.

A função acima pode ser chamada por uma rotina Sub, como a abaixo.

1234567 Sub CheckForNumber ()Dim NumIs as Integer'passar uma string de texto para a função encontrar númeroNumIs = FindNumber ("Upper Floor, 8 Oak Lane, Texas")'mostra o resultado na janela imediataDebug.Print NumIsEnd Sub

Usando uma função de dentro de uma planilha do Excel

Além de chamar uma função de seu código VBA usando um subprocedimento, você também pode chamar a função de dentro de sua planilha do Excel. As funções que você criou devem, por padrão, aparecer na sua lista de funções na seção Definida pelo Usuário da lista de funções.

Clique no fx para mostrar a caixa de diálogo Inserir Função.

Selecione Usuário definido da lista de categorias

Selecione a função que você deseja a partir do disponível Funções definidas pelo usuário (UDF's).

Como alternativa, quando você começa a escrever sua função no Excel, a função deve aparecer na lista suspensa de funções.

Se você não quiser que a função esteja disponível em uma planilha do Excel, será necessário colocar a palavra Privada antes da palavra Função ao criar a função em seu código VBA.

123 Função privada CalculateDayDiff (Date1 as Date, Date2 as Date) as DoubleCalculateDayDiff = Date2-Date1Função Final

Agora ele não aparecerá na lista suspensa que mostra as funções do Excel disponíveis.

Curiosamente, no entanto, você ainda pode usar a função - ela simplesmente não aparecerá na lista ao procurá-la!

Se você declarou o segundo argumento como Opcional, você pode omiti-lo na planilha do Excel, bem como no código VBA.

Você também pode usar a função a que criou sem argumentos em sua planilha do Excel.

wave wave wave wave wave