Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Ayuda para sumar valores en formato moneda

Estas en el tema de Ayuda para sumar valores en formato moneda en el foro de Visual Basic clásico en Foros del Web. hola saliendo de un problema y pasando a otro, lo primero necesitaba que en el evento keypress de los textbox se convirtieran los valores numéricos ...
  #1 (permalink)  
Antiguo 30/06/2006, 23:52
Avatar de black_devil  
Fecha de Ingreso: junio-2006
Mensajes: 89
Antigüedad: 17 años, 10 meses
Puntos: 1
Pregunta Ayuda para sumar valores en formato moneda

hola saliendo de un problema y pasando a otro, lo primero necesitaba que en el evento keypress de los textbox se convirtieran los valores numéricos a moneda 1000 ---> $1.000,00 separando con punto los valores moneda, bueno ese problema lo solucine pero ahora necesito sumar varias cajas de texto y me de el total en moneda tb aca va el código, necesito una ayuda de conversión...

Dim valor1, valor2 as String <--- duda?, lo dejo como integer o double?

Private Sub Form_Load()
valor1 = 0
valor2 = 0
......
End Sub

Private Sub txtviatico_Change()
valor1 = Val(txtviatico.Text)
'como valido que sea numerico o moneda?
'lo mismo para el valor2
End Sub

Private Sub txtviatico_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0 ' Para que no "pite"
SendKeys "{tab}"
StrDeFormato = Format(txtviatico, "$#,##0.00")
txtviatico.Text = StrDeFormato
End If
'apretando enter automaticamente el valor numérico lo transforma a moneda
'lo mismo para el valor2
End Sub

Private Sub cmdactualizar_Click()
txttotal.Text = Val(valor1 + valor2) <--- antiguamente sin colocar el formato moneda sumaba, lógico
End Sub

en la caja de texto toma los valores $1.000,00$1.000,00, los toma como un todo...

Bueno necesito que sume los valor1 + valor2 y mas en la caja de texto y ademas lo arroje como valor moneda, a esta hora mi cerebro quiere dormir, son las 02:00 am de CHILE, saludos amigos ...
  #2 (permalink)  
Antiguo 01/07/2006, 09:03
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
OK. La logica es esta: los valores que tenes en formato de moneda los tenes que convertir a formato numerico:
Código:
valor1 = Format(txtValor1.Text, "##0.00")
valor2 = Format(txtValor2.Text, "##0.00")
Luego teniendolos en formato numerico los sumas:
Código:
sumatoria = Val(valor1) + Val(valor2)
Despues, el resultado de la suma lo convertis a formato de moneda y lo colocas en el text en el que mostras el total:
Código:
txtTotal.Text = Format(sumatoria, "$#,##0.00")
Espero te sirva
Saludos

PD: En cuanto al tipo de datos de las variables podes declararlas como String:
Código:
Dim valor1, valor2, sumatoria As String
  #3 (permalink)  
Antiguo 01/07/2006, 10:08
Avatar de [EX3]  
Fecha de Ingreso: marzo-2006
Ubicación: Fuenlabrada, Madrid
Mensajes: 203
Antigüedad: 18 años, 1 mes
Puntos: 1
El mejor tipo de datos en Visual Basic 6 para trabajar con valores monetarios es el Currency, en VB.NET seria Decimal, que tiene mas precision que Double. Double a la larga pierde cierta precision al manejar valores despues de varias operaciones.

Salu2...
__________________
Proyecto dx_lib32 (http://dxlib32.se32.com) Libreria DLL ActiveX para el desarollo de juegos y programas multimedia en Visual Basic 6.0 con la potencia de DirectX

Dice un dicho que "el que calla otorga". En internet tenemos otro que dice "nunca alimentes a un troll" que viene a decir "dejale hablar solo que se ya se cansara de incordiar". Solo los necios creen tener la razon con la ultima palabra.

  #4 (permalink)  
Antiguo 01/07/2006, 12:00
Avatar de black_devil  
Fecha de Ingreso: junio-2006
Mensajes: 89
Antigüedad: 17 años, 10 meses
Puntos: 1
Cita:
Iniciado por jc_moty
OK. La logica es esta: los valores que tenes en formato de moneda los tenes que convertir a formato numerico:
Código:
valor1 = Format(txtValor1.Text, "##0.00")
valor2 = Format(txtValor2.Text, "##0.00")
Luego teniendolos en formato numerico los sumas:
Código:
sumatoria = Val(valor1) + Val(valor2)
Despues, el resultado de la suma lo convertis a formato de moneda y lo colocas en el text en el que mostras el total:
Código:
txtTotal.Text = Format(sumatoria, "$#,##0.00")
Espero te sirva
Saludos

PD: En cuanto al tipo de datos de las variables podes declararlas como String:
Código:
Dim valor1, valor2, sumatoria As String
Ok, pero quiero separarlo en unidades, con punto separador y que me los sume
por ej. 1000 = 1.000, 100000 = 100.000

valor1 = Format(txtValor1.Text, "#,##0.00")
valor2 = Format(txtValor2.Text, "#,##0.00")

con eso logro que los separe pero, no entrega un resultado con punto separador

sumatoria = Val(valor1) + Val(valor2)

txtTotal.Text = Format(sumatoria, "#,##0.00")
  #5 (permalink)  
Antiguo 01/07/2006, 12:23
Avatar de black_devil  
Fecha de Ingreso: junio-2006
Mensajes: 89
Antigüedad: 17 años, 10 meses
Puntos: 1
Cita:
Iniciado por [EX3]
El mejor tipo de datos en Visual Basic 6 para trabajar con valores monetarios es el Currency, en VB.NET seria Decimal, que tiene mas precision que Double. Double a la larga pierde cierta precision al manejar valores despues de varias operaciones.

Salu2...
Gracias, currency es para uso de moneda me evito poner entre "" "##0.00" es igual "currency"
  #6 (permalink)  
Antiguo 01/07/2006, 12:28
Avatar de black_devil  
Fecha de Ingreso: junio-2006
Mensajes: 89
Antigüedad: 17 años, 10 meses
Puntos: 1
jc_moty hola aun no puedo resolver el problema
mira tengo esto

Private Sub cmdactualizar_Click()
'total = Val(valor1) + Val(valor2) + Val(valor3) + Val(valor4) + Val(valor5) + Val(valor6) + Val(valor7) + Val(valor8)

'valor1 = Mid(txtpeajescelco, 2, Len(txtpeajescelco)) ' captamos el valor de txt1 a partir de "$"
'valor2 = Mid(txtpeajesotros, 2, Len(txtpeajesotros)) ' captamos el valor de txt2 a partir de "$"

'valor1 = Replace(valor1, ",", "") ' borramos las comas de valor1
'valor2 = Replace(valor2, ",", "") ' borramos las comas de valor 2

total = Val(valor1) + Val(valor2)
'txttotal = Format(total, "#,#0.00")

txttotal.Text = Format(total, "#,##0.00")
'no importa que aparesca el signo de dinero "$#,##0.00"
End Sub

Private Sub txtpeajescelco_Change()
valor1 = Format(txtpeajescelco.Text, "#,#0.00")
End Sub

Private Sub txtpeajescelco_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
valor1 = Format(txtpeajescelco.Text, "#,#0.00")
txtpeajescelco.Text = valor1
End If
End Sub

Private Sub txtpeajescelco_LostFocus()
valor1 = Format(txtpeajescelco.Text, "#,#0.00")
txtpeajescelco.Text = valor1
End Sub

Private Sub txtpeajesotros_Change()
valor2 = Format(txtpeajesotros.Text, "#,#0.00")
End Sub

Private Sub txtpeajesotros_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
valor2 = Format(txtpeajesotros.Text, "#,#0.00")
txtpeajesotros.Text = valor2
End If
End Sub

Private Sub txtpeajesotros_LostFocus()
valor2 = Format(txtpeajesotros.Text, "#,#0.00")' no importa el signo dinero
txtpeajesotros.Text = valor2
End Sub
Bueno en tiempo de ejecucion ingreso los datos en las respectivas cajas de texto me aparece asi:
text1
1.000,00
text2
1.000,00
pero en la suma
aparece
2,00
no suma los valores después del punto, o sea toma por defecto los valores en unidad...

ayuda, por favor
  #7 (permalink)  
Antiguo 01/07/2006, 20:47
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
El detalle esta en que en las variables "valor" no haces la conversion como debe de ser; vos lo haces asi:
Código:
valor2 = Format(txtpeajesotros.Text, "#,#0.00")
' lo que esta en negrilla es el error; lo correcto es asi:
valor2 = Format(txtpeajesotros.Text, "##0.00")
' ves la diferencia
Voy a dejar el codigo completo de como yo lo hice; espero te ayude en algo:
Código:
Private Sub Command1_Click()
    Dim valor1, valor2, sumatoria As String
    ' convertimos los valores de las cajas de texto a formato numerico
    valor1 = Format(Text1.Text, "##0.00")
    valor2 = Format(Text2.Text, "##0.00")
    ' tomamos los valores convertidos y los sumamos
    ' el resultado lo almacenamos en la variable sumatoria
    sumatoria = Val(valor1) + Val(valor2)
    ' en el Text3 ponemos la sumatoria en formato de moneda
    Text3.Text = Format(sumatoria, "$#,##0.00")
    'Text3.Text = Format(sumatoria, "#,##0.00")
End Sub

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        Text1.Text = Format(Text1.Text, "$#,##0.00")
        SendKeys "{tab}"
    End If
End Sub

Private Sub Text1_LostFocus()
    Text1.Text = Format(Text1.Text, "$#,##0.00")
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        Text2.Text = Format(Text2.Text, "$#,##0.00")
        SendKeys "{tab}"
    End If
End Sub

Private Sub Text2_LostFocus()
    Text2.Text = Format(Text2.Text, "$#,##0.00")
End Sub 
Si queres probarlo crea un proyecto en Visual Basic; y pega tres TextBox y un Command; colocalos como te plazca, pero no le cambies el nombre a ninguno de los controles.

Suerte
  #8 (permalink)  
Antiguo 01/07/2006, 21:41
 
Fecha de Ingreso: febrero-2006
Mensajes: 37
Antigüedad: 18 años, 3 meses
Puntos: 0
''''Hola , Tal vez la funcion CDEC te sea de utilidad


Private Sub cmdactualizar_Click()
TtxtTotal = Format((CDec(Mid(TxtpeajesCelco, 2, Len(TxtpeajesCelco))) + CDec(Mid(TxtpeajesOtros, 2, Len(TxtpeajesOtros)))), "$ ##,###,##0.00")
End Sub

Private Sub txtpeajescelco_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
TxtpeajesCelco.Text = Format(TxtpeajesCelco.Text, "$ #,###,##0.00")
End If
End Sub

Private Sub txtpeajesotros_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
TxtpeajesOtros.Text = Format(TxtpeajesOtros.Text, "$ #,###,##0.00")
End If
End Sub


Saludos
__________________
Jerico
  #9 (permalink)  
Antiguo 01/07/2006, 21:42
 
Fecha de Ingreso: febrero-2006
Mensajes: 37
Antigüedad: 18 años, 3 meses
Puntos: 0
' Hola , tal vez la funcion CDec resuelva tu duda
' Saludos


Private Sub cmdactualizar_Click()
TtxtTotal = Format((CDec(Mid(TxtpeajesCelco, 2, Len(TxtpeajesCelco))) + CDec(Mid(TxtpeajesOtros, 2, Len(TxtpeajesOtros)))), "$ ##,###,##0.00")
End Sub

Private Sub txtpeajescelco_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
TxtpeajesCelco.Text = Format(TxtpeajesCelco.Text, "$ #,###,##0.00")
End If
End Sub

Private Sub txtpeajesotros_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
TxtpeajesOtros.Text = Format(TxtpeajesOtros.Text, "$ #,###,##0.00")
End If
End Sub
__________________
Jerico
  #10 (permalink)  
Antiguo 02/07/2006, 11:44
Avatar de black_devil  
Fecha de Ingreso: junio-2006
Mensajes: 89
Antigüedad: 17 años, 10 meses
Puntos: 1
De acuerdo gracias

Cita:
Iniciado por jc_moty
El detalle esta en que en las variables "valor" no haces la conversion como debe de ser; vos lo haces asi:
Código:
valor2 = Format(txtpeajesotros.Text, "#,#0.00")
' lo que esta en negrilla es el error; lo correcto es asi:
valor2 = Format(txtpeajesotros.Text, "##0.00")
' ves la diferencia
Voy a dejar el codigo completo de como yo lo hice; espero te ayude en algo:
Código:
Private Sub Command1_Click()
    Dim valor1, valor2, sumatoria As String
    ' convertimos los valores de las cajas de texto a formato numerico
    valor1 = Format(Text1.Text, "##0.00")
    valor2 = Format(Text2.Text, "##0.00")
    ' tomamos los valores convertidos y los sumamos
    ' el resultado lo almacenamos en la variable sumatoria
    sumatoria = Val(valor1) + Val(valor2)
    ' en el Text3 ponemos la sumatoria en formato de moneda
    Text3.Text = Format(sumatoria, "$#,##0.00")
    'Text3.Text = Format(sumatoria, "#,##0.00")
End Sub

vamos a resolver el problemo, gracias por la dedicación

Private Sub Text1_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        Text1.Text = Format(Text1.Text, "$#,##0.00")
        SendKeys "{tab}"
    End If
End Sub

Private Sub Text1_LostFocus()
    Text1.Text = Format(Text1.Text, "$#,##0.00")
End Sub

Private Sub Text2_KeyPress(KeyAscii As Integer)
    If KeyAscii = 13 Then
        Text2.Text = Format(Text2.Text, "$#,##0.00")
        SendKeys "{tab}"
    End If
End Sub

Private Sub Text2_LostFocus()
    Text2.Text = Format(Text2.Text, "$#,##0.00")
End Sub 
Si queres probarlo crea un proyecto en Visual Basic; y pega tres TextBox y un Command; colocalos como te plazca, pero no le cambies el nombre a ninguno de los controles.

Suerte
  #11 (permalink)  
Antiguo 02/07/2006, 11:45
Avatar de black_devil  
Fecha de Ingreso: junio-2006
Mensajes: 89
Antigüedad: 17 años, 10 meses
Puntos: 1
gracias

Cita:
Iniciado por jericosoft
' Hola , tal vez la funcion CDec resuelva tu duda
' Saludos


Private Sub cmdactualizar_Click()
TtxtTotal = Format((CDec(Mid(TxtpeajesCelco, 2, Len(TxtpeajesCelco))) + CDec(Mid(TxtpeajesOtros, 2, Len(TxtpeajesOtros)))), "$ ##,###,##0.00")
End Sub

Private Sub txtpeajescelco_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
TxtpeajesCelco.Text = Format(TxtpeajesCelco.Text, "$ #,###,##0.00")
End If
End Sub

Private Sub txtpeajesotros_KeyPress(KeyAscii As Integer)
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{tab}"
TxtpeajesOtros.Text = Format(TxtpeajesOtros.Text, "$ #,###,##0.00")
End If
End Sub
Gracias por la dedicación, ya he resuelto el problema ...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 03:10.