Volcar números con decimales desde un TextBox a una Hoja

21/02/2007 - 23:31 por Insumos | Informe spam
Gente del foro:
Tengo un pequeño problemita con un cuadro de dialogo para ingresar un número
el cual es el siguiente.
Tengo un formulario llamado UserForm4 que tiene un TextBox2 en el cual se
ingresa un número que es un importe. He definido una variable como Currency
que toma el valor ingresado en TextBox2, lo convierte en número para luego
pasarlo como número a una base de datos en la cual se van volcando los
registros (este proceso sucede al presionar un CommandButton, dentro del
cual esta todo el código que menciono).
Hasta ahi todo bien. Lo que sucede es que cuando el importe que se carga en
el TextBox2 posee decimales (por ejemplo "50.10") el dato que copia en la
hoja de cálculo es "5,010.00" en lugar de "50.10". Experimentando he
descubierto que si se ingresa "50,10" el dato se vuelca correctamente como
"50.10". Lo cual me parece extraño porque la configuración de Excel es "."
para separar decimales y "," para miles.
El problema se soluciona si cambio la configuración de separadores (ya que
al teclear el punto del teclado numérico pondría la coma) pero como aqui
trabajamos con "." como separador decimal predeterminado y "," como de
miles, cambiar esa configuración es un problema. Y es un engorro que haya
que escribir la coma para ingresar números en el TextBox2 no pudiendo usar
el "." del teclado numérico.
Espero que me haya explicado bien. Incluyo el código abajo, que de paso
seguro se puede mejorar, ya que como verán mi forma de escribir códigos es
muy rudimentaria.
Desde ya muchas gracias. Saludos!!

Private Sub CommandButton1_Click()

Dim Importe As Currency
Dim Numero As Long
Dim FemisioN As Date
Dim FvtO As Date

If ListBox1 = Empty Then GoTo 100
If TextBox1 = Empty Then GoTo 100
If TextBox2 = Empty Then GoTo 100
If ComboBox10 = Empty Then GoTo 100
If ComboBox11 = Empty Then GoTo 100
If ComboBox12 = Empty Then GoTo 100
If ComboBox13 = Empty Then GoTo 100
If ComboBox14 = Empty Then GoTo 100
If ComboBox15 = Empty Then GoTo 100
If ComboBox16 = Empty Then GoTo 100

Sheets("Ajustes").Select
Range("A1").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
Loop

ActiveCell.FormulaR1C1 = ListBox1
ActiveCell.Offset(0, 1).Select
FemisioN = ComboBox11 + "/" + ComboBox12 + "/" + ComboBox13
ActiveCell.FormulaR1C1 = FemisioN
ActiveCell.Offset(0, 1).Select
Numero = TextBox1
ActiveCell.FormulaR1C1 = Numero
ActiveCell.Offset(0, 1).Select
ActiveCell.FormulaR1C1 = ComboBox10
ActiveCell.Offset(0, 1).Select
FvtO = ComboBox14 + "/" + ComboBox15 + "/" + ComboBox16
ActiveCell.FormulaR1C1 = FvtO
ActiveCell.Offset(0, 1).Select
Importe = TextBox2
ActiveCell.FormulaR1C1 = Importe

ListBox1 = Empty
TextBox1 = Empty
TextBox2 = Empty
ComboBox10 = Empty
ComboBox11 = Empty
ComboBox12 = Empty
ComboBox13 = Empty
ComboBox14 = Empty
ComboBox15 = Empty
ComboBox16 = Empty
GoTo 200

100
UserForm4.Hide
Load UserForm5
UserForm5.Show

200
UserForm4.Hide
Sheets("Controles").Select
Range("A1").Select

End Sub

Private Sub UserForm_Initialize()

Application.ScreenUpdating = False

Sheets("Parámetros").Select
Range("C1").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
ListBox1.AddItem ActiveCell
Loop

Range("E1").Select
Do While ActiveCell <> Empty
ActiveCell.Offset(1, 0).Select
ComboBox10.AddItem ActiveCell
Loop

For x = 1 To 31
ComboBox11.AddItem Str(x)
ComboBox14.AddItem Str(x)
Next

For x = 1 To 12
ComboBox12.AddItem Str(x)
ComboBox15.AddItem Str(x)
Next

For x = 2007 To 2010
ComboBox13.AddItem Str(x)
ComboBox16.AddItem Str(x)
Next

With ListBox1
' .Parent.Parent.Value = .Parent.Index
.SetFocus
End With

Sheets("Controles").Select
Range("A1").Select

Application.ScreenUpdating = True

End Sub


CONTADURIA
 

Leer las respuestas

#1 Héctor Miguel
22/02/2007 - 00:46 | Informe spam
hola, 'anonimo/a' !

... un formulario... un TextBox2 en el cual se ingresa un numero que es un importe.
... una variable como Currency que toma el valor ingresado en TextBox2
lo convierte en numero para luego pasarlo como número a una base de datos [...]
... sucede... que cuando el importe que se carga en el TextBox2 posee decimales (por ejemplo "50.10")
el dato que copia en la hoja de calculo es "5,010.00" en lugar de "50.10".
... he descubierto que si se ingresa "50,10" el dato se vuelca correctamente como "50.10".
Lo cual me parece extra#o porque la configuracion de Excel es "." para separar decimales y "," para 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] :))

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 del mensaje anterior] :))

Preguntas similares