VB - Calculadora Financeira usando VBA


Neste artigo vamos criar uma calculadora 'financeira' que usa os recursos de cálculo do Excel através do VBA - Visual Basic for Applications. Antes um pouco de história...

Originalmente o Excel foi desenvolvido para o Macintosh. Na verdade ela tornou-se a planilha eletrônica mais popular para a plataforma Macintosh. Esta popularidade era devida em parte pelo seu grande poder de realizar cálculos e em parte por possuir uma linguagem de macros muito fácil de aprender.

Quando a Microsoft portou o Excel para o PC ele veio com a mesma linguagem de macros usadas no Macintosh. Como todos sabem o Excel também tornou-se a planilha eletrônica mais popular no ambiente PC desbancando poderosos concorrentes (lembra do Lotus ?).

Foi então que a Microsoft tomou a decisão de introduzir a tecnologia OLE (Object Linking and Embedding) no Excel. Afim de suportar OLE no Excel , a Microsoft substituiu a sua linguagem de macros  por uma nova linguagem de macros : o VBA ou Visual Basic for Applications. A versão 5.0 do Excel foi a primeira aplicação que incluía o VBA.

Isto acarretou mudanças também na linguagem Visual Basic. Antes disto o VB era escrito em assembler o que portar o VB para 32 bits não era nada fácil , mas a partir desta data o VB passou a ser escrito em C o que permitia uma fácil portabilidade para o ambiente de 32 bits. Ao fazer esta jogada a Microsoft sinalizava com o seguinte:

O modelo de objetos do Excel é um modelo extenso e com muitos recursos , o mais importante é que ao abrir o Excel todo este modelo é exposto e pode ser usado pelos desenvolvedores através da automação OLE.

É isto que vamos fazer mostrando como criar uma calculadora usando recursos do Excel via OLE.

Inicie um novo projeto no VB (Menu File | New Project) e pressione F4 para exibir as propriedades do formulário padrão form1. Agora faça o seguinte:

   

O layout do formulário após a inclusão dos componentes é exibido abaixo:

Componentes usados no projeto:

- 2 Frames - Para separar os dados de empréstimo do pagamento

- 4 TextBoxes - Para receber o valor(txtEmprestimo) , taxa de juros(txtTaxa) e período(txtmeses) e exibir o pagamento(txtPagamento)

- 4 Labels - para dar nome as caixas de texto.

- 2 Command Buttons - Calcular(cmdCalcular) e Sair(cmdSair)

- 1 Componente UpDow Button - Para selecionar o período em  meses

Obs: Para obter o componente UpDow Button no menu Project selecione Components e marque o componente Microsoft Windows Common Controls 2.

Para que o componente funcione de forma sincronizada com a caixa de texto - txtmeses.txt - precisamos fazer a seguinte configuração:

  1. Localize a propriedade BuddyControl e informe o nome da caixa de texto - txtmeses - como valor desta propriedade
  2. A seguir defina a propriedade SyncBuddy do componente UpDown como True
  3. Agora defina os valores para as propriedades Min(=2) e Max(=24) do componente UpDown.

Na seção General Declarations do formulário inclua a seguinte linha de código onde estamos alocando espaço para a variável excelObj que será usada no projeto e será visível por toda a aplicação.

Option Explicit
Dim excelObj As Excel.Application

Agora no evento Click do botão - Calcular - insira o código abaixo:

Private Sub cmdCalcular_Click()

1 Dim dtaxa As Double
   Dim curPagamento As Currency
   Dim curEmprestimo As Currency
   Dim imeses As Integer
2 Screen.MousePointer = vbHourglass
3 If ExcelObj Is Nothing Then
         Set ExcelObj = New Excel.Application
      End If

4 dtaxa = CDbl(txtTaxa.Text)
   imeses = CInt(txtmeses.Text)
   curEmprestimo = CCur(txtEmprestimo.Text)

5 curPagamento = ExcelObj.Pmt((dtaxa / 100) , imeses , -1 * curEmprestimo)         
6 txtPagamento.Text = Format(curPagamento, "R$#,##0.00")
7 Screen.MousePointer = vbDefault

End Sub

Vamos explicar o código usando os números a esquerda das linhas de código:

Aqui estamos dimensionando as variáveis necessárias. Note o tipo de dados Currency ; as variáveis deste tipo são armazenadas como número de 64-bits (8 bytes) em um formato inteiro. O intervalo de valores vai de -922,337,203,685,477.5808 a 922,337,203,685,477.5807.

2 Alteramos o ponteiro do mouse para uma ampulheta , se o processo demorar um pouco o usuário tem um sinal visual disto.

3 Nestas linhas de códigos estamos usando o comando New. Este comando irá iniciar a aplicação Excel. A cada clique no botão de comando - Calcular - uma um objeto Excel seria criado , por isto somente usamos o comando New quando a variável objeto não esta instanciada ou seja seu valor for igual a Nothing. Esta linha de código é que consome mais recursos do sistema.

4 Neste código estou convertendo todos os valores de Strings para números. Assim temos:

5 Estou usando a função do Excel para realizar os cálculos

6 O resultado é exibido na caixa de texto formato usando a notação R$

7 O ponteiro do mouse retorna ao formato padrão

Para encerrar vamos incluir o código do evento Click do botão - Sair :

Private Sub cmdSair_Click()

Unload me
End Sub

e no evento Unload do formulário vamos incluir o seguinte código:

Private Sub Form_Unload(Cancel As Integer)

If Not excelObj Is Nothing Then
    excelObj.Quit
    Set excelObj = Nothing
End If

End Sub

Este código é muito importante, Vejamos:

Lembre-se que sua aplicação VB esta iniciando o aplicativo Excel , embora ele permaneça oculto. Para evitar deixar o programa Excel aberto quando você encerrar o programa incluímos o código acima no evento Unload de forma que sempre que o formulário for descarregado estou verificando se o objeto Excel esta vivo ou não (excelObj is Nothing) , e ,  estou encerrando o Excel e destruindo a instância do objeto excelObj criado. (Por isto não estou usando End no evento Click do botão Sair.)

Nota:  A sintaxe da função PMT no Excel é : PMT(taxa, nper, PV, FV, Tipo) onde:

taxa =  a taxa de juros para o empréstimo
nper = é o n.o de pagamentos do empréstimo
PV = o valor presente ou principal do empréstimo
FV =
 é o valor futuro, ou o saldo de caixa, que você deseja obter depois do último pagamento. Se vf for omitido, será considerado 0 (o valor futuro de determinado empréstimo, por exemplo, 0).
Tipo
= é opcional ; indica quando os pagamentos devem ser feitos:

0 Pagamentos são feitos no fim do período
1 Pagamentos são feitos no início do período
  • O pagamento retornado por PMT inclui o principal e os juros e não inclui taxas, pagamentos de reserva ou tarifas, às vezes associados a empréstimos.
  • Certifique-se de que esteja sendo consistente quanto às unidades usadas para especificar taxa e nper. Se fizer pagamentos mensais por um empréstimo de quatro anos com juros de 12% ao ano, utilize 12%/12 para taxa e 4*12 para nper. Se fizer pagamentos anuais para o mesmo empréstimo, use 12% para taxa e 4 para nper.

ou de forma resumida =PMT(valor da taxa de juros;Quantidade de prestações;Valor total da dívida)

Ex: Se você for financiar uma carro que custa R$ 10.000,00, a taxa de juros cobrada pela loja é de 8% ao ano se você pagar em 10 vezes.   Utilizando a Função de pagamento (PMT), ficaria assim a disposição dessas informações no Excel:

=PMT(8%/12;10;1000) 

Obs: A função equivalente para o Excel em português é PGTO mas no VBA usamos sempre PMT

 Fazendo o cálculo o valor da prestação seria : R$ 1.037,03. Vamos conferir usando o programa VB :

Da mesma forma que usamos a função PMT você pode incrementar o projeto com outras funções do Excel.

Na continuação vamos incluir um objeto OLE para funcionar como uma planilha Excel , aguarde...

Até mais ver ...


José Carlos Macoratti

1