sub-rotina. Se fez algum formulário, com certeza trabalhou com evento. Ambos
são popularmente conhecidos como Sub, pois no código são precedidos por essa
palavra chave.
A sub-rotina é a forma mais básica, são procedimentos que independem de
um objeto e podem utilizar ou não argumentos:Sub ProcedimentoPrincipal()
Os eventos são procedimentos relacionados a objetos, como, por exemplo, o
evento Worksheet_Activate, que está relacionado ao objeto Worksheet:
Private Sub Worksheet_Activate()
Os eventos podem ou não ter argumentos, que são variáveis associadas ao evento
em si. Um exemplo de evento com argumento é Worksheet_SelectionChange, que vem
com o argumento Target dentro dos parênteses:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Não vou colocar exemplos de sub-rotinas e eventos porque você deve ter visto
as videoaulas do Alessandro Trovato e deve saber como funcionam. Se não
assistiu ainda, assista algumas delas para aprender.
Já as funções são semelhantes a eventos com argumentos:
Function CalcularINSS(ByVal Salario As Currency) As Currency
Note que as funções diferem dos demais porque elas retornam um valor e há uma
declaração do tipo de variável que ela retorna ao final da linha. Elas podem
inclusive ser utilizadas em fórmulas dentro da própria planilha do Excel. Ou
seja, você pode construir suas próprias funções! Use o código da função
CalcularINSS abaixo e teste em sua planilha, colocando valores de salários e
fazendo a função trazer o cálculo:
Function CalcularINSS(Salario As Currency) as Currency
Dim sngPercDeducao As Single
Select Case Salario
Case Is <= 1556.94
sngPercDeducao = 0.08
Case Is <= 2594.92
sngPercDeducao = 0.09
Case Else
sngPercDeducao = 0.11
End Select
CalcularINSS = CCur(Salario * sngPercDeducao)
If CalcularINSS > 513.01 Then
CalcularINSS = 513.01
End If
End Function
Perceba que o próprio nome da função aparece no código recebendo o resultado
de um cálculo. É esse o valor que será retornado pela função.
As funções podem ter mais de um argumento e ainda é possível colocar ter
argumentos como opcionais. É importante lembrar que todo parâmetro opcional é
sempre colocado no final na lista de argumentos. Vejamos o exemplo da função
CalcularIR abaixo:
Function CalcularIR(Salario As Currency , Optional Dependente As Integer =
0) _
As Currency
Dim sngPercDeducao As Single
Select Case Salario
Case Is <= 1903.98
sngPercDeducao = 0
Case Is <= 2826.65
sngPercDeducao = 0.075
Case Is <= 3751.05
sngPercDeducao = 0.15
Case Is <= 4664.68
sngPercDeducao = 0.225
Case Else
sngPercDeducao = 0.275
End Select
CalcularIR = CCur(Salario * sngPercDeducao – Dependente *
189.59)
If CalcularIR < 0 Then
CalcularIR = 0
End If
End Function
Analisando o código atentamente, vemos que nessa função existem dois
parâmetros: Salario e Dependente, sendo este último definido como opcional. O
valor zero é atribuido caso esse parâmetro não seja colocado entre os
parâmetros da função.
Às vezes é bem mais prático criar uma função no VBA do que colocar uma fórmula
grande e complexa, sujeita a erros. As funções também podem ser referenciadas
no próprio VBA, você pode atribuir o resultado a uma variável ou ainda incluir
no meio de uma operação matemática:
DescontoIR = CalcularIR(SalBruto)
SalLiquido = SalBruto – CalcularIR(SalBruto) – CalcularINSS(SalBruto) –
_
DescontoVT + CalcularSalFam(SalBruto)
Em relação ao escopo de procedimento, por padrão, todas as sub-rotinas e
funções que você escrever serão públicas, exceto se você acrescentar a palavra
Private antes de Sub ou Function. Não há necessidade de escrever Public, a não
ser que queira deixar o código mais explícito.
Já os eventos de planilha e de formulário são privados por padrão. Pode-se
perceber que sempre aparecem precedidos pela palavra Private.
Qual a melhor forma de utilizar os procedimentos?
O ideal é deixar cada procedimento fazendo uma parte pequena do processamento,
de forma que possa ser reutilizado em outra parte e desta forma não haver
necessidade de reescrever o código. Por exemplo, se em algum ponto do
processamento é necessário reordenar uma tabela, é preferível separar essa
parte do código em uma sub-rotina separada. No trecho onde estaria esse
código, coloque o nome da sub-rotina, sem parênteses.
Deixe os nomes das suas sub-rotinas o mais explícito possível, de forma que no
código fique mais legível o que será feito. É muito melhor ler
ReordenarClientes, por exemplo, do que simplesmente Reordenar ou, pior ainda,
SortPlan. Eu tenho o hábito de sempre colocar os verbos no infinitivo e o
objeto referente, se for o caso.
Imagine uma rotina que acrescente os dados do cliente após apertar um botão. É
possível colocar todo o código no evento, mas também é possível colocar
trechos em sub-rotinas separadas. Veja como fica mais fácil entender:
Private Sub btn_CadastrarCliente_Click()
Dim bolValidacao
As Boolean
ValidarCampos ‘ realiza a consistência dos campos do formulário
If
bolValidacao = True Then
AdicionarCliente
‘ adiciona o cliente na planilha
Else
Msgbox
“Todos os campos devem estar preenchidos”
End If
End Sub
Note que há duas sub-rotinas sendo referenciadas: ValidarCampos e
AdicionarCliente. São seções separadas de código onde devem serão codificadas
as partes relativas à validação dos campos do formulário e à inserção do
cliente na tabela, respectivamente. Perceba como seções de código mais curtas
e com procedimentos com nomes amigáveis tornam tudo muito mais legível e fácil
de entender.
Antes de começar a digitar o código, sempre é bom fazer um planejamento do que
será feito. Isso permite verificar eventuais problemas ou falhas do projeto.
Imagine estar digitando o código há duas horas e de repente notar uma falha
gritante que impossibilita de continuar ou, pior, força a ter de refazer boa
parte do trabalho feito até então. Terrível, não?
Existem diversas metodologias de desenvolvimento de software, sendo
relativamente fácil encontrar sobre o assunto na internet. O método ágil, por
exemplo, traz as seguintes etapas: planejamento, levantamento de requisitos,
projeto, codificação, testes e documentação. Sair codificando sem ter a real
noção do que será feito é pular etapas essenciais que garantem a qualidade do
serviço. As horas gastas em planejamento, levantamento de requisitos e projeto
valem a pena, poupam retrabalho e garante a qualidade do serviço.
Pesquise sobre metodologias, como o método ágil supracitado, gaste um tempo
aprendendo sobre algumas delas. Depois olhe qualquer projeto que você já tenha
feito e veja como ficaria muito melhor se tivesse feito um planejamento prévio
do que seria feito. Sempre é possível melhorar o que já foi feito, mas
praticando alguma metodologia permite entregar um serviço com mais qualidade e
talvez até nem seja possível ver o que pode ser melhorado.
Pedro Martins
artefinalista, eletrotécnico, programador de CLP (para máquinas
industriais) e analista de sistemas em sistema bancário, programando em
COBOL.
quando teve um MSX e aprendeu a programar em BASIC. É a favor da
disseminação do conhecimento.