CALCULO NO LOOP

IRENKO 25/03/2015 13:54:12
#445474
Private Sub Calcula()
Dim TBarray1(1 To 8) As MSForms.Control
Dim TBarray2(1 To 2) As MSForms.Control
Dim nTotalMais As Long
Dim nTotalMenos As Integer
Dim i As Integer, j As Integer

Set TBarray1(1) = TxtValor: Set TBarray1(2) = TxtIPTU
Set TBarray1(3) = TxtAgua: Set TBarray1(4) = TxtLuz
Set TBarray1(5) = TxtCond: Set TBarray1(6) = TxtSeg
Set TBarray1(7) = TxtOutros: Set TBarray1(8) = TxtMulta


Set TBarray2(1) = TxtDesconto: Set TBarray2(2) = TxtIR

i = 0
j = 0

For i = 1 To 8
nTotalMais = nTotalMais + Val(TBarray1(i).text)

Next i

TxtTotal.text = Format(nTotalMais, [Ô]#,##0.00[Ô])

End Sub

Pessoal, estou com um bug na rotina acima.
tenho 08 TextBox no meu UserForm que estou tentando fazer uma soma com o codigo acima. No TBarray1(1) = TxtValor tenho 5.694,78 o qual somo com os outros 07 TextBox, só que o resultado no TxtTotal esta dando 6 com Long e 5,69 com Single, alguem pode me dizer onde estou errando?

Tenho mais um problema, como pode ver acima tenho mais dois TextBox setados como: Set TBarray2(1) = TxtDesconto: Set TBarray2(2) = TxtIR
Os valores do mesmo tenho que somar e depois subtrair do total, pergunto, teria como fazer isso em um so FOR?
JABA 25/03/2015 17:09:31
#445480
Resposta escolhida
Acho que a função de conversão [Ô]Val[Ô] é que está causando toda a confusão. Por isso, faça assim:

For i = 1 To 8
nTotalMais = nTotalMais + CDbl(TBarray1(i).text)
Next i

ou assim:

For i = 1 To 8
nTotalMais = nTotalMais + CLng(TBarray1(i).text)
Next i

Para resolver o seu segundo problema, tente assim:

Seu nTotalMenos está como inteiro, então ele fará um arredondamento também. Corrija isso aí.
nTotalMenos = Val(nTotalMais - (Val(TBarray2(1)) + Val(TBarray2(2))))
Tópico encerrado , respostas não são mais permitidas