Tipo de datos...

Hola Valedor. Buenas tardes desde España.
Te pido ayuda porque tengo un problemilla. Estoy programando una hoja de Excel que utiliza un formulario en el que solicita al usuario, una serie de datos que se necesitan para calcular las cuotas de un préstamo.
En la configuración regional de mi sistema, tengo configurado el separador de miles, con el punto (.), y el separador de decimales con la coma (,).
En un TextBox, quiero introducir una cifra sin separador de miles, y que a medida que vaya escribiendo la cantidad, me vaya separando los miles, y me muestre y haga los cálculos solo con 2 decimales (independientemente de que se introduzan N decimales) para lo cual la línea de código en cuestión, que tengo puesta es:
TextBox1 = Format(TextBox1, "#,##0.00")
Puedo actualizar el formato después de dejar ese TextBox y pasar al siguiente, con el evento BeforeUpdate (), pero con el evento Change() no me funciona. En cambio si me funciona el evento Change, si elimino el formato decimal, es decir, si pongo esta línea:
TextBox1 = Format(TextBox1, "#,##0")
Lo malo es que necesito los dos decimales por el tema Euro.
Aparte de ese tema de carácter menor, tengo un problemilla más importante. En el código del TextBox llamado TextBoxInteres, tengo el siguiente código:
Private Sub TextBoxInteres_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
'Si el valor introducido no es numérico...
If Not IsNumeric(TextBoxInteres) Then
'y además se entra el valor con el símbolo de porcentaje incluido
If TextBoxInteres = Format(TextBoxInteres, "##0%") Then
'entonces, si el valor es superior al 100,00%, que
'borre el porcentaje introducido
If Val(TextBoxInteres) > 100 Then
TextBoxInteres = Empty
'si no es superior al 100%, que le de formato con 2 decimales
Else
TextBoxInteres = Format(TextBoxInteres, "##0.00%")
End If
Else
TextBoxInteres = Empty
End If
'si el valor introducido es numérico...
Else
'que borre el valor si es mayor que 100
If TextBoxInteres > 100 Then
TextBoxInteres = Empty
Else
'si es menor que 100, que le de formato con dos decimales
'dividiéndolo previamente entre 100
TextBoxInteres = TextBoxInteres / 100
TextBoxInteres = Format(TextBoxInteres, "##0.00%")
End If
End If
End Sub
El problema radica en que si introduzco un valor como los de la siguiente lista (por ponerte unos ejemplos, no me funciona el código:
Valor introducido, ejemplo1: 33RWW
Valor introducido, ejemplo2: 2,2,2,5
En teoría, ambas entradas son de texto, y por tanto debería eliminármelas al pasar al siguiente TextBox (por el evento BeforeUpdate). Si cambio el Val(TextBoxInteres) por TextBoxInteres (sin el val), cuando entro un dato de texto, la macro me da un error.
Un millón de gracias anticipadas, por tu paciencia y sapiencia, y perdón por la extensa pregunta.

1 respuesta

Respuesta
1
El problema es tu primer linea, pues le dices que NO sea número, creo que esto te funcionara...
Private Sub txtInteres_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
If IsNumeric(txtInteres.Text) Then
If Abs(Val(txtInteres.Text)) <= 100 Then
txtInteres.Text = Format(Abs(Val(txtInteres.Text)) / 100, "##0.00%")
Else
txtInteres.Text = ""
End If
Else
txtInteres.Text = ""
End If
End Sub
En lo personal no me gusta usar los eventos de los TextBox, mucho menos el evento Change, en lo personal lo que hago es, dejar que el usuario introduzca lo que quiera, y en el botón que realiza el calculo, hago las validaciones pertinentes, normalmente con una función y hasta que estén bien los datos y cuando hago mis cálculos, pero esto no quiere decir que lo tienes que hacer así.
Buenas de nuevo, Valedor. El problema que me surge ahora es que no puedo introducir decimales con la coma(,) y me veo obligado a hacerlo con el punto(.) Es posible solucionar esto, ¿dado qué aquí en España usamos la coma como separador de miles?.
Gracias de nuevo.
Quería decir que es el punto el separador de miles...
En general Excel toma la configuración que tengas configurada en el panel de control, y no deberías tener problemas con ello
txtInteres.Text = Format(Abs(Val(txtInteres.Text)) / 100, "##0,00%")
Ahora use la coma y debe de funcionar, como te decía, en lo personal dejo al usuario poner lo que quiera, pero no lo dejo pasar o no hago el calculo hasta que los valores no estén bien, yo no obligo al usuario a introducir
3,456.25
por que al aplicarle normalmente la funcion Val
Valor = Val(3,456.25)
Esto me devolvería un 3 cuando no es cierto, pero, también reitero, cada quien lo puede hacer como mejor le parezca.
Gracias por tu paciencia Valedor, aunque sigue sin funcionarme con el formato
txtInteres.Text = Format(Abs(Val(txtInteres.Text)) / 100, "##0,00%")
Mi configuración regional es punto para miles y coma para decimales.
Si pongo 3, me da como resultado en el TextBox, 003% y si introduco 3,5, me sigue saliendo lo mismo 003%.
No obstante, muchas gracias, intentaré buscar una solución alternativa a mi problemilla.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas