En este grupo En todos

Foro de Excel



Conflicto entre puntos y comas en VBA. Como detectar el formato decimal de un equipo

Escrito por Joaquin
el 19/08/2008

Buen dia Abraham, necesito ayuda!


Simplemente lo siguiente:

Necesito una rutina en Visual Basic Excel para poder detectar el formato decimal de excel/sistema de un equipo y luego restringir la entrada de letras y dependiendo del formato decimal de la conf reguinal el punto o la coma. La idea es poder ingresar el punto o la coma dependiendo de la conf regional del equipo. Tengo el siguiente codigo pero no me funciona bien (solo me deja ingresar el punto y mi equipo y excel  esta configurado con , "coma" como sep decimal)

Private Sub UserForm_Initialize()
" compruebo el formato numérico del sistema
sDecimal = Format(0. 1, "#. #")
sDecimal = IIf(InStr(sDecimal, ","), ",", ". ")
End Sub

Y para cada textbox (en este caso el textbox se llama "uno7") tengo el siguiente codigo:

Private Sub uno7_KeyPress(ByVal KeyAscii As MSForms. ReturnInteger)
Rem Para validar el TextBox:
Dim sCar As String * 1
sCar = Chr(KeyAscii)
" si se ha pulsado ENTER pasamos el foco al siguiente control
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{TAB}"
Exit Sub
End If
" comprueba si se ha pulsado coma o punto y lo convierte al formato del sistema
If sCar = ". " Or sCar = "," Then
KeyAscii = IIf(sDecimal = ",", 44, 46)
sCar = Chr(KeyAscii)
" si ya se ha puesto un punto decimal, no admite otro
If (InStr(uno7, sCar) > 0) Then
KeyAscii = 0
Exit Sub
End If
ElseIf InStr("0123456789. ," & Chr(8), sCar) = 0 Then
" sólo admite números, signo negativo, punto, coma y retroceso
" Nota: Si no queremos negativos, quitar el signo menos de la cadena
KeyAscii = 0
Exit Sub
" comprueba que el signo menos esté sólo al principio
" Nota: Si no queremos negativos, quitar esta condición
ElseIf sCar = "-" Then
If InStr(2, "-", uno7) = 0 Then
KeyAscii = 0
End If
End If
End Sub

Afradecería mucho tu ayuda!


Abraham Valencia
Computacion e informatica microsoft mv...
Escrito por Abraham Valencia
el 19/08/2008
Pues una opciones:

application. DecimalSeparator

OJO, no he revisado tus macros, he ido de frente a la repsuesta de la pregunta... Pero una cosa importante, si usas la coma como separador decimal en un textbox, he intentas pasar ese valor a una celda de frente o usando Format o Val, pues, el excel no reconocera los decimales, ya que los gringuillos no consideraron las coma como separador de decimales en VBA para ningun caso :(  hay  soluciones pero no es que sean propias de VBA, sino que hay que recurrir a "trucos", pero no siendo, aparentemente, el tema, lo dejo ahi


Abraham
Galileogali -
Buenos Aires, Argent...
Escrito por Galileogali -
el 20/08/2008
"Pues una opciones:

application. DecimalSeparator

OJO, no he revisado tus macros, he ido de frente a la repsuesta de la pregunta... Pero una cosa importante, si usas la coma como separador decimal en un textbox, he intentas pasar ese valor a una celda de frente o usando Format o Val, pues, el excel no reconocera los decimales, ya que los gringuillos no consideraron las coma como separador de decimales en VBA para ningun caso :(  hay  soluciones pero no es que sean propias de VBA, sino que hay que recurrir a "trucos", pero no siendo, aparentemente, el tema, lo dejo ahi


Abraham
Editado por: Abraham Valencia (19/Agosto/2008 - 21:55) "

por Abraham Valencia (Agosto 2008)


Ya que Abrahan, trajo el tema, podrias pegarle una leida a la Propiedad International del objeto Application, con una arsenal de constantes bastante interesante....

GALILEOGALI

Https://excelgali.mejorforo.net/

Gustavo Sebastiani Cepeda
Contabilidad y finanzas universidad na...
Escrito por Gustavo Sebastiani Cepeda
el 22/08/2008

Ve a configuracion regional, inicio - panel de control  - configuracion regional - formato y ve en que formato esta y modificalo como quieras..

Galileogali -
Buenos Aires, Argent...
Escrito por Galileogali -
el 24/08/2008

Sr. Sebastiani: ¿Ha pensado que nuestro consultante, se refiere a la vision desde VBA del problema. Es decir que su pretension consiste en formular una solucion "amigable" para usuarios que instalen el programa en diferentes sistemas y que mediante código pueda "universalizarse" el camino a cualquier usuario que utilice el xls, cualquiera fueran las definiciones regionales en que esté?


GALILEOGALI

HTTP://excelgali.mejorforo.net/

Escrito por Joaquin
el 28/08/2008

Gracias por la respuesta. Ya encontré la solucion y me anda muy bien ahora. Este código detecta el sistema decimal del equipo y permite entrar numeros y coma O punto dependiendo de como este configurado el equipo (configuracion regional), y backspace

Private Sub text1_KeyPress(ByVal KeyAscii As MSForms. ReturnInteger)

" comprueba el formato numérico del sistema (configuracion regional)
SeparadorDecimal = Format(0. 1, "#. #")
SeparadorDecimal = IIf(InStr(SeparadorDecimal, ","), ",", ". ")

Rem Para validar el TextBox:
Dim sCar As String * 1
sCar = Chr(KeyAscii)
" si se ha pulsado ENTER pasamos el foco al siguiente control
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{TAB}"
Exit Sub
End If

" solo permite el ingreso de numeros 0123456789, como O punto dependiendo de la conf regional detectada y si se ha ingresado punto o coma una vez no permite otra!

If sCar = SeparadorDecimal Then
If (InStr(text1, sCar) > 0) Then
KeyAscii = 0
Exit Sub
End If
ElseIf InStr("0123456789" & Chr(8), sCar) = 0 Then
KeyAscii = 0
Exit Sub
End If
End Sub

Escrito por Joaquin
el 28/08/2008

La idea es que el programa funcione automaticamente en cualquier equipo y no que la gente tenga que estar cambiando la configuracion regional! Ya lo resolvi igual

Gracias


Escrito por Joaquin
el 28/08/2008

Ya solucioné el problema (solito solito! Je)

Les paso el siguiente cosigo que hace lo siguiente sobre un textbox

-detecta el separador decimal configurado en el equipo (por ejemplo "coma")

-una vez hecho esto solo permite ingresar numeros 0123456789, enter, backspace y coma

-si ya se ingreso una vez la "coma" no permite otra


Espero que a alguien le sirva:


Private Sub uno8_KeyPress(ByVal KeyAscii As MSForms. ReturnInteger)

" comprueba el formato numérico del sistema
SeparadorDecimal = Format(0. 1, "#. #")
SeparadorDecimal = IIf(InStr(SeparadorDecimal, ","), ",", ". ")

Rem Para validar el TextBox:
Dim sCar As String * 1
sCar = Chr(KeyAscii)
" si se ha pulsado ENTER pasamos el foco al siguiente control
If KeyAscii = 13 Then
KeyAscii = 0
SendKeys "{TAB}"
Exit Sub
End If
If sCar = SeparadorDecimal Then
If (InStr(uno8, sCar) > 0) Then
KeyAscii = 0
Exit Sub
End If
ElseIf InStr("0123456789" & Chr(8), sCar) = 0 Then
KeyAscii = 0
Exit Sub
End If
End Sub

Abraham Valencia
Computacion e informatica microsoft mv...
Escrito por Abraham Valencia
el 28/08/2008
Bueno, especificamente esos codigos no detectan tal cual el separador decimal del sistema, es mas, te aseguro que en aplicaciones de excel que tengan configurado un separador decimal diferente al del sistema operativo, pues, te llevaras algunas sorpresas

Abraham
Rodolfo Vila Vila Rodolfo
Agronomia universidad nacional agraria...
Escrito por Rodolfo Vila Vila Rodolfo
el 12/07/2009
"ve a configuracion regional, inicio - panel de control - configuracion regional - formato y ve en que formato esta y modificalo como quieras..
"

por Gustavo Sebastiani (Agosto 2008)

Gracias compa aca de lima perú quería cambiar los números de comas a puntos para usar sas system corre saludos de lima perú precisa