Varios textbox ingresar importes y sumar

Tengo 4 textbox y un label ingreso un importe en el primer textbox apretó enter me posiciono en el segundo texbox ingreso otro importe y apretó enter y así hasta el cuarto textbox l lo que necesito es que me los vaya sumando en el label a medida que lo voy ingresando

Respuesta
2

Ho la Eduardo:

Prueba lo siguiente:

Private Sub TextBox1_Change()
  Call sumar
End Sub
Private Sub TextBox2_Change()
  Call sumar
End Sub
Private Sub TextBox3_Change()
  Call sumar
End Sub
Private Sub TextBox4_Change()
  Call sumar
End Sub
Sub sumar()
  Dim i As Long
  Dim tot As Double
  For i = 1 To 4
    With Controls("TextBox" & i)
      If .Value <> "" Then
        tot = tot + CDbl(.Value)
      End If
    End With
  Next
  Label1.Caption = tot
End Sub

Recomendado:

https://youtu.be/uZdFYfDuR8A 


Sal u dos

Dante Amor

Un fenmeno Dante como siempre me ayudas muchísimo pero me gustaría agregar dos cosas los formatos decimales de pesos en todo y poder ingresar en los texbox un numero negativo y los reste es decir en cualquier texbox ingreso 15.000 y en otro -5000 el resultado sea 10.000 y en color rojo en el label gracias

el color del label tiene que ser rojo si el resultado es negativo sino negro

Hola dante te molesto algo que me olvide cuando voy ingresando importe en los texbox y llego al ultimo después de ingresar un importe necesito que vuelva la primero para y haga el recorrido pero en azul para ir modificando el importe que necesite gracias

Qué quieres en azul, en rojo, ¿las números o el fondo del textbox?

Prueba lo siguiente:

Option Explicit
Private Sub TextBox1_Change()
  Call sumar
End Sub
Private Sub TextBox2_Change()
  Call sumar
End Sub
Private Sub TextBox3_Change()
  Call sumar
End Sub
Private Sub TextBox4_Change()
  Call sumar
End Sub
Private Sub TextBox1_Enter()
  Call SinFormato(TextBox1)
End Sub
Private Sub TextBox2_Enter()
  Call SinFormato(TextBox2)
End Sub
Private Sub TextBox3_Enter()
  Call SinFormato(TextBox3)
End Sub
Private Sub TextBox4_Enter()
  Call SinFormato(TextBox4)
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call ConFormato(TextBox1)
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call ConFormato(TextBox2)
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call ConFormato(TextBox3)
End Sub
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call ConFormato(TextBox4)
  TextBox1.SetFocus
End Sub
Sub SinFormato(tbx As MSForms.TextBox)
  If tbx.Value <> "" Then
    tbx.Value = CDbl(tbx.Value)
    tbx.ForeColor = &HFF0000      'azul
  End If
End Sub
Sub ConFormato(tbx As MSForms.TextBox)
  If tbx.Value <> "" Then
    tbx.Value = Format(tbx.Value, "$#,##0.00")
    tbx.ForeColor = &H80000012     'negro
  End If
End Sub
Sub sumar()
  Dim i As Long
  Dim tot As Double
  Dim wcolor
  For i = 1 To 4
    With Controls("TextBox" & i)
      If .Value <> "" Then
        If .Value <> "-" Then
          tot = tot + CDbl(.Value)
        End If
      End If
    End With
  Next
  If tot < 0 Then wcolor = &HFF& Else wcolor = &H80000012
  Label1.Caption = Format(tot, "$#,##0.00")
  Label1.ForeColor = wcolor
End Sub

Recomendaciones:

https://youtu.be/FDF1UX3co2g 

Sal u dos

Dante Amor

todo perfecto dante pero me podes corregir esto necesito que cuando lo coloree de azul para modificar salga el numero con los punto y la como se ingreso gracias

Cambia el código por lo siguiente:

Observa que al inicio del código puse una variable, debe ir al inicio de todo el código.

Option Explicit
Dim formateando As Boolean
Private Sub TextBox1_Change()
  Call sumar
End Sub
Private Sub TextBox2_Change()
  Call sumar
End Sub
Private Sub TextBox3_Change()
  Call sumar
End Sub
Private Sub TextBox4_Change()
  Call sumar
End Sub
Private Sub TextBox1_Enter()
  Call CuandoEntra(TextBox1)
End Sub
Private Sub TextBox2_Enter()
  Call CuandoEntra(TextBox2)
End Sub
Private Sub TextBox3_Enter()
  Call CuandoEntra(TextBox3)
End Sub
Private Sub TextBox4_Enter()
  Call CuandoEntra(TextBox4)
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call CuandoSale(TextBox1)
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call CuandoSale(TextBox2)
End Sub
Private Sub TextBox3_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call CuandoSale(TextBox3)
End Sub
Private Sub TextBox4_Exit(ByVal Cancel As MSForms.ReturnBoolean)
  Call CuandoSale(TextBox4)
  TextBox1.SetFocus
End Sub
Sub CuandoEntra(tbx As MSForms.TextBox)
  If tbx.Value <> "" Then
    formateando = True
    'tbx.Value = Format(CDbl(tbx.Value), "#.00")
    tbx.ForeColor = &HFF0000      'azul
    formateando = False
  End If
End Sub
Sub CuandoSale(tbx As MSForms.TextBox)
  If tbx.Value <> "" Then
    formateando = True
    tbx.Value = Format(tbx.Value, "$#,##0.00")
    tbx.ForeColor = &H80000012     'negro
    formateando = False
  End If
End Sub
Sub sumar()
  Dim i As Long
  Dim tot As Double
  Dim wcolor
  If formateando = True Then Exit Sub
  For i = 1 To 4
    With Controls("TextBox" & i)
      If .Value <> "" Then
        If .Value <> "-" Then
          tot = tot + CDbl(.Value)
        End If
      End If
    End With
  Next
  If tot < 0 Then wcolor = &HFF& Else wcolor = &H80000012
  Label1.Caption = Format(tot, "$#,##0.00")
  Label1.ForeColor = wcolor
End Sub

Revisa lo siguiente:

https://m.youtube.com/watch?v=HfFCtMl189U 

Sal u dos Dante Amor

Hola dante tengo un problema te puedo mandar mi archivo para que lo revises me anda perfecto lo que necesitaría es que me coloree en azul como te pedí el que me mandaste tiene un problema cundo junto todo dentro de un frame no me anda puede ser que te mande el archivo así me lo revisas

"Es que me coloree en azul como te pedí "

No entiendo a qué te refieres con azul.

Te pregunté:

"Qué quieres en azul, en rojo, ¿las números o el fondo del textbox?"

Y no contestaste a mi pregunta. Debes poner atención a mis comentarios, para que de esa forma te entregue una solución adecuada.

En azul dante para poder modificar o borrar el importe, el tema es que me gustaría mandarte el archivo para que veas así es más fácil porque en el mismo formular hay en dolares y en pesos

Mira dante aquí te mando lo que es el formulario que necesito.que vendría ser la caja diaria de dolares y pesos los importes del frame PC los toma de la hoja de calulo después yo voy ingresando en los textbox los importe de dolares primero cuando llego al 4 texbox de dolares vuelve al primero que se va a poner en azul para poder modificar si quisiera y si apretó enter va al segundo textbox y así sucesivamente una vez que concilio la caja de dolares empiezo hacer la de pesos con el mismo prosedimento hasta concilia me explico, si me deja te mando el archivo así lo ves mejor y me ayudas

Sigo sin entender qué quieres en azul.

Todo el formulario, el fondo del texbox, la letra del textbox, en tu imagen veo todo azul.

1 respuesta más de otro experto

Respuesta
5

Te había preparado un ejemplo en la consulta anterior pero como ya le habías enviado el libro al experto de Access lo dejé en suspenso,

Mirá, por cada control debieras tener estas 2 subrutinas: con una se controla que solo se ingresen valores y coma y con la otra se acumula en una variable, se muestra en un Label ese acumulado y además se muestra en el Textbox y en el Label con formato... bien completita ;)

Te dejo los códigos para 2 controles. Tendrás que repetirlos para los otros que tengas. Es importante que no te olvides de la primera línea donde se declara la variable común a todas las macros.

Dim importe As Double
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii < 48 And KeyAscii <> 44) Or KeyAscii > 57 Then
    KeyAscii = 0
    MsgBox "Error en el dato. Solo se aceptan valores numéricos.", , "Atención"
End If
End Sub
Private Sub TextBox1_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox1 <> "" Then
    importe = importe + CDbl(Val(TextBox1)): Label2.Caption = Format(importe, "#,###,##0.00")
End If
TextBox1 = Format(TextBox1, "#,###,##0.00")
End Sub
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If (KeyAscii < 48 And KeyAscii <> 44) Or KeyAscii > 57 Then
    KeyAscii = 0
    MsgBox "Error en el dato. Solo se aceptan valores numéricos.", , "Atención"
End If
End Sub
Private Sub TextBox2_Exit(ByVal Cancel As MSForms.ReturnBoolean)
If TextBox2.Value <> "" Then
    importe = importe + CDbl(TextBox2.Value): Label2.Caption = Format(importe, "#,###,##0.00")
End If
TextBox2 = Format(TextBox2, "#,###,##0.00")
End Sub

Les recomiendo el manual de Userforms: un capítulo para el desarrollo de cada control. Con libros de ejemplos listos para usar!

Excelente como siempre elsa pero me gustaría arreglar algo cuando cambio o borro algún numero del textbox que me lo reste del label no como ahora que me lo sigue sumando me explico y también si ingreso un numero negativo que me lo reste osea -100 por ejemplo graciqas

Pero si solicitas adicionales, no deberías haber valorado mi respuesta sin antes recibirlos. Estamos en fin de semana y mi respuesta iría recién mañana... aunque ya te recuerdo que sos el usuario que no sabe cómo modificar la votación o valoración ;(

Todos los pasos para realizar cálculos con controles TextBox, agregando formatos de moneda y actualizando resultados, también con formatos, en el video Nº 74 de mi canal:

https://www.youtube.com/watch?v=tlJ1pNk9bIw&list=PLrhlyizWZzOERwRMxIIy-BTP-CyXh_K5N&index=1&t=330s 

Con libro de ejemplo para descargar!

Sdos!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas