Macro para muliplicar en TextBox

Tengo una instrucción para multiplicar dos textbox y cuyo resultado lo arroje en un tercer textbox, el problema que tengo es que si por ejemplo en el textbox1 pongo "105.2" y en texbox2 "15" en el textbox3 me da como resultado $1,578.00 lo cual es correcto, pero si cambio el valor del texbox 2 por "16" el resultado en el textbox3 es $16,832.00 lo cual no debe ser. En que estaré mal. Anexo la instrucción

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1 <> "" And TextBox2 <> "" Then
        TextBox3 = CDbl(TextBox1) * CDbl(TextBox2)
        TextBox3 = VBA.Format(TextBox3, "currency")
        TextBox2 = VBA.Format(TextBox2, "currency")
        TextBox1 = Replace(TextBox1, ",", ".")
    End If
    TextBox2.SetFocus
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If TextBox1 <> "" And TextBox2 <> "" Then
        TextBox3 = CDbl(TextBox1) * CDbl(TextBox2)
        TextBox3 = VBA.Format(TextBox3, "currency")
        TextBox2 = VBA.Format(TextBox2, "currency")
        TextBox1 = Replace(TextBox1, ",", ".")
    End If
    TextBox1.SetFocus
End Sub
1

1 Respuesta

25.175 pts. Nunca es tarde para aprender....

Si tu escribes simplemente así

Me.TextBox3.Value = TextBox1.Value * TextBox2.Value

ya te esta dando el resultado

[quote]

Recuerda valorar la respuesta si te fue útil -

Pero esa instrucción donde la escribo dentro de mi instrucción

Es la misma que esta que tienes tu

TextBox3 = CDbl(TextBox1) * CDbl(TextBox2)

por eso no entiendo tu error =/

Porque yo la probé y multiplica lo más bien, el error esta en que no cambia el "." por la "," y te da cualquier cosa je je

Porque yo probé tu línea de replace y no me funciono.

Aqui encontre otro codigo quizas lo puedas usar

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If InStr(TextBox1, ",") > 0 Then
nuevo = Replace(TextBox1.Value, ",", ".")
TextBox1.Value = nuevo
End If
End Sub

nunca use la instruccion "replace" asi que nose como hacer para que funcione =/

Sino simplemente escribe con "," en lugar de "." para evitar errores..

Humilde sugerencia je je

Usando mi código, mira el error es solo cuando en el texbox1 pongo números con decimales

Sebas Torres 

Mira encontré esta otra instrucción y si funciona pero a la hora que escribo en el texbox2 debería cambiar a signo de moneda pero no lo ejecuta bien, si lo comento la instrucción de cambiar signo de moneda funciona todo bien. Si encuentras algo que me ayude te lo agradeceré.

Private Sub TextBox1_Change()
ValidarTextbox TextBox1
End Sub
Private Sub TextBox2_Change()
ValidarTextbox TextBox2
End Sub
Private Sub ValidarTextbox(TextBox As Control)
On Error Resume Next
TextBox3 = ""
Registrar.Enabled = False
If Not IsNumeric(TextBox) Then
   TextBox = Left(TextBox, Len(TextBox) - 1)
   Exit Sub
End If
If IsNumeric(TextBox1) And IsNumeric(TextBox2) Then
   TextBox3 = FormatNumber(CDbl(TextBox1) * CDbl(TextBox2))
   Registrar.Enabled = True
End If
'TextBox2 = VBA.Format(TextBox2, "currency")
TextBox3 = VBA.Format(TextBox3, "currency")
End Sub

Estuve mirando tu código y sabes que encontré tu error

Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
TextBox1 = Replace(TextBox1, ".", ",")
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
   TextBox2 = Replace(TextBox2, ".", ",")
   TextBox2 = VBA.Format(TextBox2, "currency")
    If TextBox1 <> "" And TextBox2 <> "" Then
        TextBox3 = (TextBox1) * (TextBox2)
        TextBox3 = VBA.Format(TextBox3, "currency")
    End If
End Sub

"Replace" va primero el valor que remplaza y luego por que vas a remplazarlo, tu lo tienes al reves estabas remplazando la "," por el "." por eso no multiplicaba

Déjame decirte amigo que sigue igual con tu observación, mil gracias de todas formas. pero por el momento me quedare con esta instrucción aunque en el TextBox2 no aparezca el signo de moneda.

Private Sub TextBox1_Change()
ValidarTextbox TextBox1
End Sub
Private Sub TextBox2_Change()
ValidarTextbox TextBox2
End Sub
Private Sub ValidarTextbox(TextBox As Control)
On Error Resume Next
TextBox3 = ""
Registrar.Enabled = False
If Not IsNumeric(TextBox) Then
   TextBox = Left(TextBox, Len(TextBox) - 1)
   Exit Sub
End If
If IsNumeric(TextBox1) And IsNumeric(TextBox2) Then
   TextBox3 = FormatNumber(CDbl(TextBox1) * CDbl(TextBox2))
   Registrar.Enabled = True
End If
TextBox3 = VBA.Format(TextBox3, "currency")
End Sub

Que raro porque yo lo probé y me funcionó bien

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas