VALORES NEGATIVOS VBA

DANIELNEGREIROS 26/03/2012 09:55:06
#398267
Ola pessoal,

sou novo em vba e estou enfrentando um probleminha, estou desenvolvendo um sistema que vai basicamente pegar os valores mensais e somalos, só que ao digitar valores negativos (-) aparece uma mensagem de erro (13- tipos incopativeis).
Sera que alguem poderia me ajudar.

Obrigado
KERPLUNK 26/03/2012 10:04:40
#398272
Existe alguma variável que está tentando instanciar um valor negativo e seu tipo de dados não permite isso...
DANIELNEGREIROS 26/03/2012 10:11:38
#398274
é um Double.
Double não permite isso, que variável permite?

Ta aki a função

Function CheckValor()

Dim m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12 As Double
Dim t1, t2, t3, t4, t5, t6, t7, t8, t9, t10, t11, t12 As String
Dim s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12 As String
Dim r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12 As Double
Dim line As Double
line = Novo_Indicador_UF.cod

s1 = BD.Cells(line, 130).Text
s2 = BD.Cells(line, 146).Text
s3 = BD.Cells(line, 162).Text
s4 = BD.Cells(line, 178).Text
s5 = BD.Cells(line, 194).Text
s6 = BD.Cells(line, 210).Text
s7 = BD.Cells(line, 226).Text
s8 = BD.Cells(line, 242).Text
s9 = BD.Cells(line, 258).Text
s10 = BD.Cells(line, 274).Text
s11 = BD.Cells(line, 290).Text
s12 = BD.Cells(line, 306).Text

m1 = CDbl(s1)
m2 = CDbl(s2)
m3 = CDbl(s3)
m4 = CDbl(s4)
m5 = CDbl(s5)
m6 = CDbl(s6)
m7 = CDbl(s7)
m8 = CDbl(s8)
m9 = CDbl(s9)
m10 = CDbl(s10)
m11 = CDbl(s11)
m12 = CDbl(s12)

t1 = (m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + m11 + m12)
t2 = (m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10 + m11)
t3 = (m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9 + m10)
t4 = (m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8 + m9)
t5 = (m1 + m2 + m3 + m4 + m5 + m6 + m7 + m8)
t6 = (m1 + m2 + m3 + m4 + m5 + m6 + m7)
t7 = (m1 + m2 + m3 + m4 + m5 + m6)
t8 = (m1 + m2 + m3 + m4 + m5)
t9 = (m1 + m2 + m3 + m4)
t10 = (m1 + m2 + m3)
t11 = (m1 + m2)
t12 = (m1)


BD.Cells(line, 131).Value = t12
BD.Cells(line, 147).Value = t11
BD.Cells(line, 163).Value = t10
BD.Cells(line, 179).Value = t9
BD.Cells(line, 195).Value = t8
BD.Cells(line, 211).Value = t7
BD.Cells(line, 227).Value = t6
BD.Cells(line, 243).Value = t5
BD.Cells(line, 259).Value = t4
BD.Cells(line, 275).Value = t3
BD.Cells(line, 291).Value = t2
BD.Cells(line, 307).Value = t1
txt_Valor_Acumulado_1.Value = t12
txt_Valor_Acumulado_2.Value = t11
txt_Valor_Acumulado_3.Value = t10
txt_Valor_Acumulado_4.Value = t9
txt_Valor_Acumulado_5.Value = t8
txt_Valor_Acumulado_6.Value = t7
txt_Valor_Acumulado_7.Value = t6
txt_Valor_Acumulado_8.Value = t5
txt_Valor_Acumulado_9.Value = t4
txt_Valor_Acumulado_10.Value = t3
txt_Valor_Acumulado_11.Value = t2
txt_Valor_Acumulado_12.Value = t1
txt_Valor_Acumulado_13.Value = t1
CASTELO 26/03/2012 10:12:07
#398275
Daniel, poste seu código para melhor interpretação.
KERPLUNK 26/03/2012 10:18:41
#398276
Dim m1, m2, m3, m4, m5, m6, m7, m8, m9, m10, m11, m12 As Double
Dim r1, r2, r3, r4, r5, r6, r7, r8, r9, r10, r11, r12 As Double

As linhas acima, ao contrário do que possa parecer, não criam 12 variáveis double, mas sim, uma(a última) double e todas as outras como [Ô]variant[Ô]
Além disso, esse código dá pra [Ô]enxugar[Ô] muito, está bastante mal-formulado, para uma lógica simples de iniciante está ok, vai funcionar, mas tem que pensar na legibilidade dele...
DANIELNEGREIROS 26/03/2012 10:22:01
#398277
então me sugira alguma coisa melhor por favor.
DANIELNEGREIROS 26/03/2012 10:43:23
#398284
Alguem por favor poderia me dizar o porque que quando eu digito ( - ), da erro 13 tipos incopativeis?
MARCELO.TREZE 26/03/2012 10:47:33
#398285
Resposta escolhida
colega posta uma exemplo que gera o erro, quando vc digita este menos?
DANIELNEGREIROS 26/03/2012 10:49:30
#398286
Eu ja postei acima Marcelo.

Tenho um TextBox e quando eu vou digitar um valor negativo nele, só de colocar o - o código (acima) ja da erro de tipos incopativeis.
MARCELO.TREZE 26/03/2012 11:23:01
#398291
bom vamos ver como o KERPLUNK disse somente a ultima variavel [ô]m[ô] foi declarada como double

então peço permissão pra fazer uma pequena alteração, vamos

    Dim m(1 to 12)  As Double
Dim t(1 to 12) As Double
Dim s(1 to 12) As Double
Dim r(1 to 12) As Double
Dim line As Double, Coluna As Integer
Coluna = 130
line = Novo_Indicador_UF.cod
For A = 1 To 12
s(A) = CDbl(BD.Cells(line, Coluna).Text)
Coluna = Coluna + 16
Next A

For A = 1 To 12
m(A) = S(A)
Next A

Dim SB As Integer
SB = 12
For A = 1 To 12
For B = 1 To SB
t(A) = t(A) + m(B)
Next B
SB = SB - 1
Next A

Dim Coluna2 As Integer
Coluna2 = 131
For A = 12 To 1 Step -1
BD.Cells(line, Coluna2).Value = t(A)
Coluna2 = Coluna2 + 16
Next A

txt_Valor_Acumulado_1.Value = t(12)
txt_Valor_Acumulado_2.Value = t(11)
txt_Valor_Acumulado_3.Value = t(10)
txt_Valor_Acumulado_4.Value = t(9)
txt_Valor_Acumulado_5.Value = t(8)
txt_Valor_Acumulado_6.Value = t(7)
txt_Valor_Acumulado_7.Value = t(6)
txt_Valor_Acumulado_8.Value = t(5)
txt_Valor_Acumulado_9.Value = t(4)
txt_Valor_Acumulado_10.Value = t(3)
txt_Valor_Acumulado_11.Value = t(2)
txt_Valor_Acumulado_12.Value = t(1)
txt_Valor_Acumulado_13.Value = t(1)


eu fiz esta modificação acima, teste, tomara que funcione




DANIELNEGREIROS 26/03/2012 11:27:36
#398292
Nossa, Marcelo muito obrigado mesmo, funcionou perfeitamente.

Se você tivesse perto eu te dava um beijo.. hahaha.. Obrigado.
Página 1 de 2 [11 registro(s)]
Tópico encerrado , respostas não são mais permitidas