Ir ao conteúdo
  • Cadastre-se
Hugo Mello

RESOLVIDO VBA Excel - contas com textbox

Recommended Posts

Bom dia,

 

estou desenvolvendo um VBA em que, ao colocar o valor orçado de um tratamento tenho 2 opções: à vista e parcelado.

 

Em parcelado, informo o juros que vou cobrar, carencia, entrada e numero de parcelas. Com essas informações tenho o valor das parcelas.

 

O problema é que no cálculo o juros não está contando as casa decimais, ele arredonda. por exemplo, se coloco juros igual a 1 ou a 2 ele faz certo, mas se coloco juros igual a 1,2 ou 1,5 ou qualquer outra casa decimal ele arredonda para cima ou para baixo, gerando uma grande diferença no valor das parcelas. O código segue abaixo.

 

Obrigado pela atenção,

HM

Private Sub cmdCalcular_Click()      If txtValorOrçado = "" Then        MsgBox "Você deve informar o valor orçado.", vbInformation, "Reabilitar"          ElseIf txtPorcDescontoVista = "" Then        MsgBox "Você deve informar o desconto.", vbInformation, "Reabilitar"           Else               Dim p As Integer        Dim d As Integer        Dim e As Integer        Dim c As Integer        Dim i As Integer        Dim n As Integer                                 p = txtValorOrçado.Text        d = txtPorcDescontoVista.Text        e = txtEntrada.Text        c = cbCarencia.Text        i = txtJuros.Text        n = txtNumParcelas.Text                      txtDinheiroVista.Text = p * (1 - (d / 100))                                               If txtEntrada = "0" And txtJuros = "0" And cbCarencia = "0" And txtNumParcelas = "0" Then                txtValorParcelas = "0"                txtValorTotalParcelado = p                                       ElseIf cbCarencia = 0 And txtEntrada = 0 And txtJuros > 0 And txtNumParcelas > 0 Then                txtValorParcelas = p / ((((1 + (i / 100)) ^ n) - 1) / (((1 + (i / 100)) ^ n) * (i / 100)))                txtValorTotalParcelado = n * (p / ((((1 + (i / 100)) ^ n) - 1) / (((1 + (i / 100)) ^ n) * (i / 100))))                       ElseIf cbCarencia = 0 And txtEntrada > 0 Then  ' Cálculos daqui para baixo ainda incorretos, apenas utilizados para teste                txtValorParcelas = (p * (1 - (e / 100))) / ((((1 + i / 100) ^ n) - 1) / (((1 + i / 100) ^ n) * i / 100))                txtValorTotalParcelado = (p * (e / 100)) + (n * (p * (1 - (e / 100))) / ((((1 + i / 100) ^ n) - 1) / (((1 + i / 100) ^ n) * i / 100)))                                           ElseIf cbCarencia > 0 And txtEntrada = 0 Then                txtValorParcelas = (p * (1 + (i / 100)) ^ (c - 1)) / ((((1 + (i / 100)) ^ n) - 1) / ((1 + (i / 100) ^ n) * (i / 100)))                                                        End If                  End IfEnd Sub

Compartilhar este post


Link para o post
Compartilhar em outros sites

resolvi! haha

 

se alguém tiver o mesmo problema é porque defini as variáveis As Integer e o ideal seria As Double. Seguem as diferenças:

Integer
As variáveis do tipo Integer são armazenadas como números
de 16 bits (2 bytes) com valor no intervalo de -32.768 a 32.767. O
caractere de declaração de tipo para Integer é o sinal de porcenta-
gem (%).
As variáveis Integer também podem ser usadas para representar
valores enumerados. Um valor enumerado pode guardar um conjun-
to fi nito de números inteiros exclusivos, cada um com um signifi ca-
do especial no contexto em que é usado. Valores enumerados ofere-
cem uma forma conveniente de seleção entre um número conhecido
de opções em um formulário. Por exemplo, preto = 0, branco = 1
e assim por diante. Pode-se defi nir constantes mediante a instrução
CONST para cada valor enumerado.

 

Double
Variável aplicada em números com ou sem casas decimais. Double
é uma variável genérica, capaz de comportar muitas outras variáveis
especializadas, que serão vistas adiante.


aproveitando a oportunidade:

 

String
Para conjuntos com até 65.000 caracteres (texto). Utiliza-se esse
tipo de variável para conjuntos de caracteres, incluindo a defi nição
de repositórios locais (C:. D:) ou de rede (\192.168.1.20, \josejoa-
quim), nomes de arquivos (gastos.xls), endereços de células ($A$1$)
e todos os elementos de texto ou sobre os quais não efetuaremos
cálculo. É o equivalente VBA das strings que defi nem as proprieda-

des das células de uma planilha do Excel: não é possível fazer cál-
culos com células de texto, ao mesmo tempo em que não se pode
utilizar funções de texto em células numéricas.

Double
Variável aplicada em números com ou sem casas decimais. Double
é uma variável genérica, capaz de comportar muitas outras variáveis
especializadas, que serão vistas adiante.

Bytes
As variáveis Byte são armazenadas como números de 8 bits
(1 byte), sem sinal, únicos, e que variam, em valor, de 0 a 255. O tipo
de variável Byte é útil para conter dados binários (0 e 1).

Integer
As variáveis do tipo Integer são armazenadas como números
de 16 bits (2 bytes) com valor no intervalo de -32.768 a 32.767. O
caractere de declaração de tipo para Integer é o sinal de porcenta-
gem (%).
As variáveis Integer também podem ser usadas para representar
valores enumerados. Um valor enumerado pode guardar um conjun-
to fi nito de números inteiros exclusivos, cada um com um signifi ca-
do especial no contexto em que é usado. Valores enumerados ofere-
cem uma forma conveniente de seleção entre um número conhecido
de opções em um formulário. Por exemplo, preto = 0, branco = 1
e assim por diante. Pode-se defi nir constantes mediante a instrução
CONST para cada valor enumerado.

Long
As variáveis do tipo Long (inteiro longo) são armazenadas como nú-
meros de 32 bits (4 bytes) sinalizados, no intervalo de -2.147.483.648
a 2.147.483.647. O caractere de declaração de tipo para Long é o “e
comercial” (&).

Single
As variáveis do tipo Single (vírgula fl utuante de precisão simples)
são armazenadas como números de vírgula fl utuante com 32 bits
(4 bytes) e têm um valor no intervalo de -3,402823E38 a -1,401298E-
45 para valores negativos e de 1,401298E-45 a 3,402823E38 para
valores positivos. O caractere de declaração de tipo para Single

é o ponto de exclamação (!). Single é a última das strings usadas
para representar valores numéricos armazenados dentro da variá-
vel Double.

Date
Variável utilizada para a declaração de datas. As variáveis Date
são armazenadas como números de ponto fl utuante de 64 bits (8
bytes) responsáveis por representar as datas que variam de 1 de
janeiro do ano 100 a 31 de dezembro de 9999, abrangendo, também,
as horas de 0:00:00 a 23:59:59, segundo o modelo internacional de
24 horas.
Qualquer valor reconhecível e literal de data (não representado
de maneira exclusivamente numérica) pode ser atribuído a variáveis
Date. Os literais Date devem estar entre sinais (#), por exemplo, #1
de janeiro de 1993# ou #1 jan 93#.
As variáveis Date exibem as datas de acordo com o formato
reconhecido por seu computador, assim como as horas (12 ou 24
horas). Para mais informações sobre como operar a confi guração
de data e hora, leia o tópico Confi gurações de data e hora, nesse
mesmo capítulo.
As datas manipuladas pela variável estão localizadas, normalmen-
te, nas células das planilhas. É possível, portanto, copiar o conteúdo
das células para o interior da variável Date sem prejuízo nenhum no
desenrolar do código.

Variant
A variável Variant é utilizada para todas as variáveis não explici-
tamente declaradas como de algum outro tipo (usando instruções
como Dim, Private, Public ou Static). O tipo de dados Variant não
possui caractere de declaração.
Uma Variant é um tipo especial de variável que pode guardar
qualquer dado, exceto dados String de comprimento fi xo. Uma
Variant também pode conter os valores especiais Empty, Error,
Nothing e Null. É possível determinar ainda como os dados em uma
Variant são tratados mediante as funções VarType ou TypeName.
Os seus dados numéricos podem ser qualquer valor de número in-
teiro ou real no intervalo de -1,797693134862315E308 a -4,94066E-324
para valores negativos e de 4,94066E-324 a 1,797693134862315E308
para valores positivos. Geralmente, os dados numéricos Variant
são mantidos em seu tipo original no interior da variável.

A Variant pode ser utilizada em códigos que guardam uma gran-
de quantidade de cálculos a serem processados, pois essa variável é
capaz de trabalhar com mais de 4.000 cálculos por vez.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Visitante
Este tópico está impedido de receber novos posts.





Sobre o Clube do Hardware

No ar desde 1996, o Clube do Hardware é uma das maiores, mais antigas e mais respeitadas publicações sobre tecnologia do Brasil. Leia mais

Direitos autorais

Não permitimos a cópia ou reprodução do conteúdo do nosso site, fórum, newsletters e redes sociais, mesmo citando-se a fonte. Leia mais

×