Sumar TextBox con formato en formulario de excel

Para Dante.

Hola, como estas, aquí molestándote nuevamente: tengo un formulario en el cual ingreso unos datos a textbox y deseo sumar estos datos y que su resultado quede en un textbox, todos los textbox quiero que tengan formato de moneda. Para este último caso del formato estoy utilizando el siguiente código (cabe anotar que estos textbox contienen un resultado de multiplicar dos textbox):

Private Sub txtSubTotal1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Resultado de multiplicar precio de venta con cantidad
txtSubTotal1 = txtPrecio1 * txtCantidad1
'Formato moneda
txtSubTotal1 = Format(txtSubTotal1, "#,000.00")

Private Sub txtSubTotal2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Resultado de multiplicar precio de venta con cantidad
txtSubTotal2 = txtPrecio2 * txtCantidad2
'Formato moneda
txtSubTotal1 = Format(txtSubTotal1, "#,000.00")
End Sub

Private Sub txtTotal_Exit(ByVal Cancel As MSForms.ReturnBoolean)
'Formato moneda
txtTotal = Format(txtTotal, "#,000.00")

End Sub

Todo funciona bien, hasta que deseo sumar. Ingreso el código y me queda un 1. Si elimino este código e inserto para sumar, suma perfecto pero no me da formato de moneda y no me da el resultado en los textbox que multiplico.

Option Explicit
Private Sub txtSubTotal1_Change()
Sumar
End Sub

Private Sub txtSubTotal2_Change()
Sumar
End Sub

Private Sub Sumar()
Dim Suma As Double
Suma = Val(txtSubTotal1.Text) + Val(txtSubTotal2.Text)
txtTotal.Text = Format(Suma)
End Sub

Lo que puedo observar es que se utilizan dos eventos Exit y Change. Como puedo hacer para que con un solo evento o la combinación de estos me den los tres resultados: 1) Multiplicar los textbox; 2) que se de el formato de moneda; 3) que se sumen los textbox en otro con formato de moneda.

Soy malo para explicarme, cualquier inconveniente pido disculpas.

Respuesta
1

H o  l a:

Utiliza el siguiente código:

Option Explicit
Private Sub txtCantidad1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call Actualizar1
    txtCantidad1 = Format(txtCantidad1, "#,000.00")
End Sub
Private Sub txtPrecio1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call Actualizar1
    txtPrecio1 = Format(txtPrecio1, "#,000.00")
End Sub
Sub Actualizar1()
    Dim t1, t2
    If Not IsNumeric(txtPrecio1) Then Exit Sub
    If Not IsNumeric(txtCantidad1) Then Exit Sub
    If txtPrecio1 = "" Then t1 = 0 Else t1 = CDbl(txtPrecio1)
    If txtCantidad1 = "" Then t2 = 0 Else t2 = CDbl(txtCantidad1)
    txtSubTotal1 = t1 * t2
    txtSubTotal1 = Format(txtSubTotal1, "#,000.00")
    Call sumar
End Sub
'
Private Sub txtCantidad2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call Actualizar2
    txtCantidad2 = Format(txtCantidad2, "#,000.00")
End Sub
Private Sub txtPrecio2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    Call Actualizar2
    txtPrecio2 = Format(txtPrecio2, "#,000.00")
End Sub
Sub Actualizar2()
    Dim t1, t2
    If Not IsNumeric(txtPrecio2) Then Exit Sub
    If Not IsNumeric(txtCantidad2) Then Exit Sub
    If txtPrecio2 = "" Then t1 = 0 Else t1 = CDbl(txtPrecio2)
    If txtCantidad2 = "" Then t2 = 0 Else t2 = CDbl(txtCantidad2)
    txtSubTotal2 = t1 * t2
    txtSubTotal2 = Format(txtSubTotal2, "#,000.00")
    Call sumar
End Sub
'
Sub sumar()
    Dim t1, t2
    If txtSubTotal1 = "" Then t1 = 0 Else t1 = CDbl(txtSubTotal1)
    If txtSubTotal2 = "" Then t2 = 0 Else t2 = CDbl(txtSubTotal2)
    txtTotal = Format(t1 + t2, "#,000.00")
End Sub

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

¡Gracias! Dante como siempre excelente. Te agradezco mucho.

' : )
'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias
' : )

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas