120 Lições | Gratuito Online | Autor: Júlio Battisti
Nas lições do Módulo 5, aprendemos a utilizar as funções prontas, que já fazem parte do Excel. Porém, podemos criar nossas próprias funções.
Neste item, aprenderemos a criar nossas próprias funções e Sub-rotinas . O princípio por trás da criação de funções e sub-rotinas, é o de reaproveitamento de código e facilidade de manutenção do programa.
Imagine que estejamos criando uma planilha para cálculos financeiros, por exemplo, depreciação contábil. Vamos supor que em diversos locais, seja necessária a realização do cálculo de depreciação. Poderíamos colocar o código/fórmulas que faz o cálculo, em cada um dos locais, onde o cálculo seja necessário. Mas esta não é a melhor maneira de criarmos nossos programas. Imagine, por exemplo, quando fosse necessário alterar a maneira de realizar os cálculos. Teríamos que repassar todos os locais onde o cálculo é feito, procurando os pontos onde o código está , e fazer as alterações.
Para resolver estes problemas, poderíamos criar uma função ou sub-rotina que faz os cálculos de depreciação. A função/sub-rotina seria criada dentro de um módulo de código do VBA, na própria planilha. Depois, em cada local onde precisamos fazer os cálculos, é só chamar a função (ou sub-rotina), para fazer os cálculos. Quando fosse necessária a alteração da metodologia de cálculo, era só alterar a função (ou sub-rotina) e pronto, os novos cálculos passarão a ser feitos com base na nova metodologia. Isto poupa esforço , reduz o número de linhas de código , e facilita a manutenção , além de reduzir a possibilidade de erros . Agora é chegada a hora de aprendermos a criar funções e sub-rotinas. Estes procedimentos/funções são criados em módulos de código VBA associados a planilha. Quando uma destas funções/procedimentos for necessária, basta chamar a respectiva função/procedimento que o Microsoft Excel se encarrega de localizar a função/procedimento, passar os parâmetros necessários (se for o caso) e receber os resultados retornados, caso seja uma função.
NOTA: Vamos falar um pouco mais sobre o termo Procedimento. Um procedimento é um grupo de instruções que pode ser chamado pelo nome atribuído ao procedimento. Neste contexto, funções e sub-rotinas, são tipos diferentes de procedimentos.
Uma sub-rotina é um grupo de comandos que podem ser executados, simplesmente através da chamada do nome da Sub-rotina. Podemos passar um ou mais argumentos para uma Sub-rotina. Quando uma sub-rotina é chamada, a execução desloca-se para dentro da Sub-rotina, depois de executados todos os comandos dentro da Sub-rotina, a execução do código continua, com o comando seguinte ao que chamou a Sub-rotina.
A sintaxe para a criação de uma Sub-rotina é a seguinte:
Sub Nome_da_Sub-rotina(argumento1, argumento2, ..., argumenton)
Comando1
Comando2
...
Comandon
End Sub
Uma Sub-rotina pode, ou não, conter argumentos. Caso sejam necessários argumentos, estes serão passados quando a Sub-rotina for chamada, e devem ser passados, na mesma ordem em que foram definidos.
DICA: Quando você criar Sub-rotinas, procure utilizar nomes que descrevam a função da Sub-rotina. Com isso você torna o entendimento do código mais fácil para quem for utilizá-lo.
Considere o seguinte exemplo de declaração de uma Sub-rotina:
Sub Calcula_imposto(salario, desconto, extras)
Comando1
Comando2
...
Comandon
End Sub
Neste caso, declaramos uma rotina chamada Calcula_imposto, a qual espera receber 3 parâmetros: salario, desconto e extras. Os parâmetros devem ser fornecidos nesta ordem, para que a Sub-rotina funcione corretamente.
Uma vez criada a Sub-rotina, podemos chamá-la, simplesmente digitando o nome da Sub-rotina, ou utilizando a palavra Call , mais o nome da Sub-rotina. Nos exemplos abaixo, temos dois métodos de chamada da Sub-rotina Calcula_imposto:
Calcula_imposto(1500,23,125)
ou
Call Calcula_imposto(1500,23,125)
Observe que os parâmetros são passados dentro do parênteses.
Também poderíamos declarar uma Sub-rotina, sem parâmetros. Neste caso posso simplesmente não utilizar os parênteses após o nome da Sub-rotina, ou utilizar um par de parênteses, sem nada dentro, conforme indicado abaixo:
Sub Nome_da_Sub-rotina
Comando1
Comando2
...
Comandon
End Sub
ou
Sub Nome_da_Sub-rotina( )
Comando1
Comando2
...
Comandon
End Sub
Por exemplo, poderíamos criar uma Sub-rotina que exibe uma Caixa de mensagem com a Data do sistema e a hora, no Formato indicado na Figura a seguir:
Poderíamos criar todos os comandos necessários, para exibir a hora e a data neste formato, cada vez que a exibição fosse necessária. Porém é mais prático criar uma Sub-rotina que faz este trabalho. Cada vez que precisarmos exibir a data e a hora neste formato, é só chamarmos a Sub-rotina.
Na Listagem a seguir temos o código da Sub-rotina exibe_data_hora (), a qual faz a exibição da data e da hora, no formato proposto pela Figura anterior.
Listagem - A Sub-rotina exibe_data_hora
Sub exibe_data_hora
mes_atual=Month(Date())
mes_nome=MonthName(mes_atual,False)
mensagem = "Ano atual: " & Year(Date()) & Chr(13)
mensagem = mensagem & "Mês atual: " & mes_nome & Chr(13)
mensagem = mensagem & "Hoje é dia: " & Day(Date())& Chr(13)
mensagem = mensagem & Chr(13) & "***************" & Chr(13)& Chr(13)
hora_atual = Hour(Time())
minuto_atual = Minute(Time())
secundo_atual = Second(Time())
mensagem = mensagem & "Hora atual: " & hora_atual & chr(13)
mensagem = mensagem & "Minuto atual: " & minuto_atual & chr(13)
mensagem = mensagem & "Secundo atual: " & secundo_atual
MsgBox mensagem
End Sub
Agora, cada vez que for necessário exibir a data e a hora nos formatos do exemplo, basta chamar a Sub-rotina exibe_data_hora, utilizando um dos seguintes comandos:
Call exibe_data_hora
ou
exibe_data_hora
Uma Função é um grupo de comandos que podem ser executados, simplesmente através da chamada do nome da Função. Podemos passar um ou mais argumentos para uma Função. Quando uma Função é chamada, a execução desloca-se para dentro da Função, depois de executados todos os comandos dentro da Função, a execução do código continua, com o comando seguinte ao que chamou a Função. A diferença da Função para a Sub-rotina, é que a Função sempre retorna um ou mais valores para o comando que a chamou.
A sintaxe para declaração de uma Função é a seguinte:
Function Nome_da_Função(argumento1, argumento2, ..., argumenton) As Tipo
Comando1
Comando2
...
Comandon
End Function
Uma Função pode, ou não, conter argumentos. Caso sejam necessários argumentos, estes serão passados quando a Função for chamada, e devem ser passados, na mesma ordem em que foram definidos.
DICA: Quando você criar Função, procure utilizar nomes que descrevam os objetivos da Função. Com isso você torna o entendimento do código mais fácil para quem for utilizá-lo.
Considere o seguinte exemplo de declaração de uma Função:
Função Converte_para_dolar(valor_em_real, cotacao_dolar)
Comando1
Comando2
...
Comandon
End Function
Neste caso, declaramos uma Função chamada Converte_para_dolar, a qual espera receber 2 parâmetros: um valor em real e a cotação do dólar.
Uma vez criada a Função, devemos chamá-la, em um comando de atribuição, isto é, o valor retornado pela função, deve ser atribuído a uma variável, ou exibido através de um comando como MsgBox. No exemplo abaixo, estamos atribuindo o valor de retorno da função, à variável valor_dolar.
valor_dolar = Converte_para_dolar (1500,1.81)
Também poderíamos exibir o valor retornado pela função, utilizando o comando MsgBox, conforme indicado a seguir:
MsgBox "Valor em dólar: " & Converte_para_dolar (1500,1.81)
Observe que os parâmetros são passados dentro dos parênteses, e na mesma ordem definida quando da criação da função.
Também poderíamos declarar uma Função, sem parâmetros. Neste caso posso simplesmente não utilizar os parênteses após o nome da Função, ou utilizar um par de parênteses, sem nada dentro, conforme indicado abaixo:
Function Nome_da_Função
Comando1
Comando2
...
Comandon
End Function
ou
Function Nome_da_Função( )
Comando1
Comando2
...
Comandon
End Function
Por exemplo, vamos criar uma função que converte um valor de um ângulo de Graus para Radianos. Depois utilizaremos a função dentro de um laço For...Next, para exibir o valor em radianos, para os ângulos de 0 à 20 graus.
No exemplo a seguir temos o código onde foi criada a função CRad, que converte um valor em graus para radianos. Depois utilizamos um laço for para exibir, através de uma Caixa de mensagem os valores em radianos, para os ângulos de 0 à 20 graus.
'Criação da função CRad.
Function CRad(valor_graus)
CRad = (valor_graus*3.14)/180
End Function
'Agora utilizamos a função dentro do laço For/Next.
For i=0 to 20
mensagem = mensagem & "Angulo: " & i & "Valor em Radianos: "
mensagem = mensagem & FormatNumber(CRad(i),5)& Chr(13)
Next
MsgBox mensagem
IMPORTANTE: Observe que dentro da função, atribuímos a variável CRad um determinado valor. É isso que caracteriza uma função. Dentro do código da função, devemos atribuir a uma variável que tenha o mesmo nome da função, um determinado valor. Este valor é que será o valor de retorno da função.
Cabe salientar o uso da função FormatNumber, dentro do laço For. A função FormatNumber é utilizada para formatar a maneira como um número é exibido. Neste caso, utilizamos a função FormatNumber, para limitar o número de casas decimais, a 5 casas depois da vírgula.
Em cada "passada" do laço For...Next, chamamos a função CRad(i), para fazer a conversão de Graus para radianos. O Valor retornado pela função CRad, é passado para a função FormatNumber, para ser formatado com apenas 5 casas decimais.
VOCÊ CONHECE A UNIVERSIDADE DO EXCEL? |
UNIVERSIDADE PRÁTICA DO EXCEL - Domine o Excel, do Básico até a Criação de Planilhas Profissionais com Excel e VBA! Aplica-se ao Excel 2019, 2016, 2013 e 2010! |
22 Cursos - 925 Vídeo-Aulas - 120:42 horas - Só R$ 97,00 |
Para Todos os Detalhes, Acesse: |