............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Ingresar Numeros a un Textbox

Ver el tema anterior Ver el tema siguiente Ir abajo

Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Dom Nov 21, 2010 4:32 pm

Me parecio interesante traer este ejemplo, ya que mi buen tiempo me costó encontrar (gracias a un forista de Mrexcel) el necesario "clear" de KeyAscii, con KeyAscii =0

La intencion era emular la carga de un importe en la Pantalla de un Cajero automatico, que a medida que ingresamos un numero el siguiente desplaza a los anteriores hacia la izquierda, pero siempre exhibiendo dos decimales.

Aca va este codigo, seguramente optimizable por algun otro interesado en el tema

Código:
Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Static strCad As String
strCad = strCad & Chr(KeyAscii)

With TextBox2
.Text = Format(Val(strCad) / 100, "#,##0.00")
.SelStart = Len(.Text)

End With
KeyAscii = 0
End Sub

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por Tatayayan el Dom Nov 21, 2010 7:13 pm

Gali, prueba así: ejecuta el userform donde esta el código, pone un número cualquiera, por ejemplo el ingreso secuencia es 3 primero 2 segundo 1 primero, hasta aquí esta todo bien, borra el contenido y escribí un nuevo número, creo que falla, dado que static converva el valor.
Private Sub Nro_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
Static strCad As String
strCad = strCad & Chr(KeyAscii)
strCad = IIf(Nro = "", Chr(KeyAscii), strCad)
With Nro
.Text = Format(Val(strCad) / 100, "#,##0.00")
.SelStart = Len(.Text)
End With
KeyAscii = 0
End Sub
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Dom Nov 21, 2010 8:11 pm

Mientras iba resolviendo, se me habia cruzado el tema de un posible retroceso, para borrar, que bien podria no ser total.
Creo que todavia hay que ri mas lejos y preguntar si la tecla presionada es la de "retroceso" cualquiera fuese el tamaño de la cadena resultante y entonces recargar static

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por Tatayayan el Dom Nov 21, 2010 8:24 pm

Gali, Creo que también la tecla Delete
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por Tatayayan el Dom Nov 21, 2010 8:38 pm

Estoy pensando, que hay que tener en cuanta el retroceso, la tecla delete, ya sea que se borre todo, parte y acá parte puede ser que ya esté el número 3,21 me ubique con flechas del cursor "al medio" y borré un número, ya sea por retroceso o delete. La Cosa "se pone cuesta arriba"
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Dom Nov 21, 2010 8:39 pm

Intentando seguir puliendo

Código:
Option Explicit
Dim strCad As String

Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)

If strCad = "" Or (KeyCode <> 8 And KeyCode <> 46) Then Exit Sub
If KeyCode = 8 Or KeyCode = 46 Then strCad = Left(strCad, Len(strCad) - 1)

End Sub

Private Sub TextBox2_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
strCad = strCad & Chr(KeyAscii)

With TextBox2
.Text = Format(Val(strCad) / 100, "#,##0.00")
.SelStart = Len(.Text)

End With
KeyAscii = 0
End Sub

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Dom Nov 21, 2010 8:45 pm

Tal vez mas contundente cuando aparezca Delete (supr)

Código:
Private Sub TextBox2_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 46 Then strCad = "": TextBox2 = "": Exit Sub
If strCad = "" Or (KeyCode <> 8 And KeyCode <> 46) Then Exit Sub
If KeyCode = 8 Or KeyCode = 46 Then strCad = Left(strCad, Len(strCad) - 1)

End Sub

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por Tatayayan el Dom Nov 21, 2010 8:58 pm

Haber, mira si escribo 321 en ese orden, y con flechas de cursor "me paro al medio", presiono del se borra todo, otro detalle si escribo 321, en ese orden y "me paro entre el 2 y el 1" y presiono retroceso se borra el 2, BIEN, pero siquiero poner el 7 por ejemplo no queda el 1, y si borré el 2, el resultado final es 3,27 cuando creo debe ser 3,17
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por Tatayayan el Dom Nov 21, 2010 8:59 pm

Disculpá Gali, debo estar "pesado hoy", bueno dejo el tema.
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Mar Nov 23, 2010 8:10 am

Gracias, Tatayayan. Yo creo que la única manera de vivir es retomar cada día los logros y los fracasos para seguir remontándolos en procura de una aproximación a las utopías. Para eso tratar de tener intacta la capacidad de discernir, y para eso nada mejor que someter los logros parciales (todos los logros son siempre parciales, por suerte) a la mirada de los demás (en lo posible alguien experto)....Así que, resumiendo, lejos de provocarme molestia, muy por el contrario, se agradece la colaboracion para detectar falencias. Ahora se me ocurrió cambiar de Evento, por KeyUp, eliminar la variable a nivel módulo y ...probamos?

Código:
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim strCad As String
Application.ScreenUpdating = False
strCad = Format(Val(Replace(Replace(TextBox1, ",", ""), ".", "")) / 100, "#,##0.00")
TextBox1 = strCad
End Sub

Me interesa saber resultados con distintos separadores de decimales y de miles

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Mar Nov 23, 2010 1:54 pm



A ver como va....

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por Tatayayan el Mar Nov 23, 2010 2:12 pm

Lo estuve mirando y solo un detalle (quizas sea un parecer mío) . puse 321, en ese orden, quedó 3,21, BIEN, con flecha de cursor (derecha) "me puse" entre el 2 y el 1, presione retroceso, y se puso 0,31 agregué el 7 y se puso 3,17, mi acotación acá no tendría que poner 3,71? pero es un simple detalle; similar comportamiento si "me pongo entre la coma y el 2" y presiono delete y agrego el 7.
Lo demás todo OK!
avatar
Tatayayan
Moderador
Moderador

Masculino Cantidad de envíos : 319
Ciudad - Pais : Chamical- La Rioja - ARG
Fecha de inscripción : 20/11/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por wenner el Mar Nov 23, 2010 8:12 pm

Y así:

Código:
Private Sub TextBox1_Change()
    TextBox1 = Format(Val(Replace(Replace(TextBox1, ",", ""), ".", "")) / 100, "#,##0.00")
End Sub
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

wenner
Moderador
Moderador

Masculino Cantidad de envíos : 13
Edad : 106
Ciudad - Pais : España
Version de Excel : 2003-2007
Fecha de inscripción : 07/10/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por P@li el Mar Nov 23, 2010 8:40 pm

Yo quiero aportar mi código, recién sacado del horno!!

Código:

Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim predet As String
    Dim pos As Long
    Dim txtorig As String
    Dim txtlen As Long
   
    If InStr("0123456789,", Chr(KeyAscii)) > 0 Then
        predet = Format(Mid(TextBox1.Text, 1, TextBox1.SelStart) & Chr(KeyAscii) & Mid(TextBox1.Text, TextBox1.SelStart + TextBox1.SelLength + 1), "0.00")
        pos = TextBox1.SelStart
        txtorig = Mid(TextBox1, 1, pos)
        txtlen = Len(txtorig)
        TextBox1.Text = txtorig & Mid(predet, Len(txtorig) + 1)
        TextBox1.SelStart = txtlen + 1
        TextBox1.SelLength = Len(Mid(predet, Len(txtorig) + 1))
    End If
    KeyAscii = 0
End Sub

Saludos!
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por moises melgar el Mar Nov 23, 2010 8:59 pm

hola P@li probe el codigo y no me salen los decimales, es decir cada numero que escribo se escribe antes del punto dejandome sin decimales
gracias
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 552
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por P@li el Mar Nov 23, 2010 9:01 pm

tenés que escribir la coma y listo

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por P@li el Mar Nov 23, 2010 9:03 pm

Ahí está Moises, para avanzar al decimal con el punto.

Código:
Private Sub TextBox1_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
    Dim predet As String
    Dim pos As Long
    Dim txtorig As String
    Dim txtlen As Long
   
    If Chr(KeyAscii) = "." Then KeyAscii = Asc(",")
    If InStr("0123456789,", Chr(KeyAscii)) > 0 Then
        predet = Format(Mid(TextBox1.Text, 1, TextBox1.SelStart) & Chr(KeyAscii) & Mid(TextBox1.Text, TextBox1.SelStart + TextBox1.SelLength + 1), "0.00")
        pos = TextBox1.SelStart
        txtorig = Mid(TextBox1, 1, pos)
        txtlen = Len(txtorig)
        TextBox1.Text = txtorig & Mid(predet, Len(txtorig) + 1)
        TextBox1.SelStart = txtlen + 1
        TextBox1.SelLength = Len(Mid(predet, Len(txtorig) + 1))
    End If
    KeyAscii = 0
End Sub

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por moises melgar el Mar Nov 23, 2010 9:34 pm

ahh ok gracias,espero con ansias el dia en que tenga el "nivel" que tiene los moderadores foro, gracias por las aportaciones
avatar
moises melgar
Jr_Moderator

Masculino Cantidad de envíos : 552
Edad : 29
Ciudad - Pais : Coatzacoalcos - Mexico
Version de Excel : 2007 - 2010
Fecha de inscripción : 25/05/2010

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por P@li el Mar Nov 23, 2010 10:02 pm

Tiene un error, quizás puedas ayudar a solucionarlo, se pueden colocar múltiples comas en un mismo número, antes o después del número decimal, estaría bueno evitar eso sin complicar al usuario. Se les ocurre algo?
Saludos.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Mar Nov 23, 2010 10:55 pm

Sí que se ha puesto bueno esto.....y pensar que aparentemente parece tan trivial.....

[Tienes que estar registrado y conectado para ver este vínculo]


El mio tambien espera retoquesm vense los comentarios de Tatayayan (Adrian)

Ahi van alguos retoques

Código:
Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
Dim strCad As String
Dim iPosCursor As Integer
Application.ScreenUpdating = False
strCad = Format(Val(Replace(Replace(TextBox1, ",", ""), ".", "")) / 100, "#,##0.00")
TextBox1 = strCad
If iPosCursor = 0 Then
iPosCursor = Len(strCad) + 1
Else
iPosCursor = TextBox1.SelStart
End If
If KeyCode = 37 Or KeyCode = 39 Then KeyCode = 0: Exit Sub
If KeyCode = 8 Then iPosCursor = TextBox1.SelStart + 1
If KeyCode = 46 Then iPosCursor = TextBox1.SelStart
TextBox1.SelStart = iPosCursor
KeyCode = 0

End Sub


Última edición por GalileoGali el Miér Nov 24, 2010 12:12 am, editado 2 veces

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por wenner el Mar Nov 23, 2010 11:10 pm

Revisa el evento change del TextBox2, pone TextBox1 en lugar de 2.

wenner
Moderador
Moderador

Masculino Cantidad de envíos : 13
Edad : 106
Ciudad - Pais : España
Version de Excel : 2003-2007
Fecha de inscripción : 07/10/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por GalileoGali el Miér Nov 24, 2010 12:15 am

wenner escribió:Revisa el evento change del TextBox2, pone TextBox1 en lugar de 2.

Tienes razón, ya lo corregi. El tuyo funciona muy bien, aunque como el último mío, al usar la tecla SUPR/ DELETE MANDA EL CURSOR AL FINAL

WENNER: estuve viendo el tuyo con CHANGE, resulta sin lugar a dudas: MUY EFICIENTE y super economico en lo que a código se refiere, eso sin contar el que en otra simple linea validas el ingreso de Dígitos. De paso te consulto
aqui
Código:
Private Sub TextBox2_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
    If InStr("0123456789", Chr(KeyAscii)) = 0 Then KeyAscii = 0
End Sub

Parece segun probe que ¿es indiferente evaluar KeyCode o KeyAscii??

_________________
GalileoGali
M.A.P. 2010-2013
Microsoft Active Professional
avatar
GalileoGali
Admin

Masculino Cantidad de envíos : 1963
Edad : 62
Ciudad - Pais : QUIROGA, Argentina
Version de Excel : 2000-2003-2007-2010
Fecha de inscripción : 24/01/2008

http://excelgali.mejorforo.net

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por P@li el Miér Nov 24, 2010 8:01 am

Hola Gali,
Excelente el nivel del hilo, y respondiendo por Wenner, me parece que esa porción de código es indiferente, yo la borré y al parecer funcional de la misma manera.
Y por otro lado, no, no es indiferente KeyCode o KeyAscii, porque fijate que al no estar declarado el valor de KeyAscii está siempre "Vacío".

Saludos

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por joregona1 el Dom Dic 07, 2014 9:08 am

Buenos días, desafortunadamente cuando se ingresa un Valor en el textbox1, no permite asignar los decimales, por defecto el programa los asigna

joregona1

Masculino Cantidad de envíos : 2
Edad : 51
Ciudad - Pais : Cali - Colombia
Version de Excel : 97
Fecha de inscripción : 07/12/2014

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por joregona1 el Dom Dic 07, 2014 9:12 am

Buenos días, el código que estoy usando en el Textbox 1 es: (Quiero aclarar que mi Textbox1 le he dado el nombre de Valor y no me funciona con el evento: Private Sub TextBox1_KeyUp(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer), me toco usar el evento Change

Private Sub Valor_Change()

Dim strCad As String
Dim iPosCursor As Integer
Application.ScreenUpdating = False
strCad = Format(Val(Replace(Replace(Valor, ",", ""), ".", "")) / 100, "#,##0.00")
Valor = strCad
If iPosCursor = 0 Then
iPosCursor = Len(strCad) + 1
Else
iPosCursor = Valor.SelStart
End If
If KeyCode = 37 Or KeyCode = 39 Then KeyCode = 0: Exit Sub
If KeyCode = 8 Then iPosCursor = Valor.SelStart + 1
If KeyCode = 46 Then iPosCursor = Valor.SelStart
Valor.SelStart = iPosCursor
KeyCode = 0

End Sub

joregona1

Masculino Cantidad de envíos : 2
Edad : 51
Ciudad - Pais : Cali - Colombia
Version de Excel : 97
Fecha de inscripción : 07/12/2014

Volver arriba Ir abajo

Re: Ingresar Numeros a un Textbox

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.