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.
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 de valedor
1