Numeros decimales en un TextBox con configuración distinta al in gl

24/08/2007 - 21:50 por Orlando | Informe spam
Hola, Buenas tardes
Estoy desarrollando un programa en VBA para Excel y requiero conocer como
introducir números con decimales en un TextBox con la configuración Regional
de idioma en español: En las celda de las hojas de cálculo funciona bien, con
las comas separando decimales y los puntos las unidades de miles, no así
cuando los introduzco, los números decimales, a través del teclado numérico
(Num pad), en el TextBox, lo cual da errores en los cálculos posteriores.
He probado con el formato (“###,0”) y otros en las rutinas (Sub)
TextBox1_Change() pero no funciona. Sí cambio la configuración regional al
inglés los cálculos funcionan bien, pero los requerimientos del programa es
la de mantener las operaciones de cálculo con la configuración regional en
español.

Si alguien puede ayudarme, le agradecería de antemano


yaguaso
 

Leer las respuestas

#1 Héctor Miguel
25/08/2007 - 02:29 | Informe spam
hola, Orlando !

... en VBA para Excel... como introducir numeros con decimales en un TextBox
... configuracion Regional de idioma en espa#ol... con las comas separando decimales y los puntos las unidades de miles [...]



este 'tema' se ha tocado en varias conversaciones anteriormente
tiene que ver con cuadros de texto 'vinculado' a celdas en la hoja de calculo :-((
una de las mas 'recientes' te la copio/pego a continuacion [portas 'armarte' tus conculsiones] :))

[de todas formas] si cualquier duda [o informacion adicional]... comentas ?
saudos,
hector.

==1) es un comportamiento 'normal' [???] del textbox =>cuando esta 'ligado' a una celda< es este el caso ?, porque ademas, como VBA es US-Centric, las funciones como Val(), Format() y similares...
-> no aceptan la coma como separador 'valido' para las decimales :D sin embargo...

2) un textbox ['ligado'] NO 'acepta' el punto como un 'caracter valido' para sus propiedades .Value/.Text
aun si lo introduces en 'esos campos' en la ventana de propiedades [en 'tiempo de dise#o']
y... dicho sea 'de paso'... OJO... porque tambien
-> 'le desaparece' el formato a la celda donde esta vinculado el textbox y 'le aplica' uno 'numerico' con 0 decimales :(

3) [al parecer] es un 'bug-no-atendido', que SOLO 'se presenta' en las versiones 'non-us-centric' de excel
a pesar de que [el uso 'entendido' de] un textbox 'toma' [preferentemente] TEXTOS y 'debiera aceptar' CUALQUIER caracter,
[en el caso de 'valores' ligados a una celda] 'pareciera asumir' que toda version 'non-us-centric' usa la coma en las decimales :\
=>viene 'presentandose' desde la version '97 hasta la version 2003<
prueba: un formulario con dos textboxes [uno 'ligado' a alguna celda y otro 'libre'] mas un commandbutton [para los mensajes]
la celda vinculada al textbox1 contiene 123.45
en el textbox2 se introduce la misma 'figura/cantidad' de 123.45 [nota: el separador decimal usando el punto del teclado numerico]

dado que vba es us-centric, los miles se separan por coma y las decimales por punto en funciones como Format(... etc.
por lo que el codigo para el commandbutton1 permanece sin modificaciones :))
Private Sub CommandButton1_Click()
MsgBox "Ligado: " & Format(TextBox1, "#,##0.00") & vbCr & _
"Origen: " & Format(Range(TextBox1.ControlSource), "#,##0.00") & vbCr & _
"Libre : " & Format(TextBox2, "#,##0.00")
End Sub

op1: configuracion americana [la mia por omision :))] -> separddores: decimales/pnto, miles/coma, listas/coma
a) la celda se muestra como: 123.45 [al igual que el textbox2 cuando se introducen los datos]
b) el textbox1 [ligado] muestra 123,45
c) el cuadro de mensajes devuelve:
Ligado: 12,345.00
Origen: 123.45
Libre : 123.45

op2: cambiando a configuracion europea -> separadores: decimales/coma, miles/punto, listas/punto_y_coma
a) la celda se muestra como: 123,45 [diferente al textbox2 cuando se introducen los datos... -> 123.45]
b) el textbox1 [ligado] muestra 123,45 [no hay cambios en el textbox 'ligado']
c) el cuadro de mensajes devuelve:
Ligado: 123,45
Origen: 123,45
Libre : 12.345,00

op3: todavia usando la configuracion europea, pero... usando la coma [teclado alfanumerico] al llenar el textbox2...
a) la celda se muestra como: 123,45 [al igual que el textbox2 cuando se introducen por teclado alfanumerico -> 123,45]
b) el textbox1 [ligado] muestra 123,45 [no hay cambios en el textbox 'ligado']
c) el cuadro de mensajes devuelve:
Ligado: 123,45
Origen: 123,45
Libre : 123,45

los demas 'comportamientos' posibles [modificar el textbox ligado y/o la celda vinculada en tiempo de ejecucion]...
siguien siendo 'bizarros' [segun los comentarios previos de este mensaje] :))

Preguntas similares