[Resuelto] Problema con punto y coma de decimales |
Responder |
Autor | |
zelarra
Habitual Unido: 21/Octubre/2020 Localización: España Estado: Sin conexión Puntos: 122 |
Tema: [Resuelto] Problema con punto y coma de decimales Enviado: 21/Octubre/2020 a las 16:35 |
Hola, muy buenas tardes.
Soy nuevo por el foro. Espero que mis preguntas pueden ayudar a otra gente con sus proyectos. Quería plantear un problema que se me ha dado esta mañana, que ya lo tuve hace tiempo y le di solución. Tengo una función personalizada en un módulo para sacar el nombre del rango de un ratio. Este ratio toma como valor entre 0 y 1. Como yo tengo configurado en mi ordenador los decimales con coma, y los miles con punto, esto me da problemas con VBA. Para ello, lo que hago es utilizar Replace, para sustituir las comas por puntos. Bien, esto me ha estado funcionando hasta ahora sin problemas. Sin embargo, como he dicho, cuando toma como valor menor que 1, por ejemplo, 0,5, cuando lo paso por el Replace, en vez de devolverme 0.5, me devuelve 5, y claro, la función me da error porque no encuentra ese valor entre los valores que tengo guardados en una tabla. Aquí os dejo una captura de pantalla: https://www.dropbox.com/s/w7b1qrr0pfgc9l3/ScreenShot001.jpg?dl=0 ¡Gracias!
Editado por zelarra - 26/Octubre/2020 a las 22:00 |
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14025 |
Enviado: 21/Octubre/2020 a las 16:48 |
VBA tiene un a función propia para convertir los valores numéricos en una cadena que es 'usable' por SLQ. Prueba con Str.
... WHERE Micampo = " & Str(Me.Valor) & " .....
|
|
zelarra
Habitual Unido: 21/Octubre/2020 Localización: España Estado: Sin conexión Puntos: 122 |
Enviado: 21/Octubre/2020 a las 17:07 |
Pues creo que no lo estoy haciendo bien:
Function TipoIndiceCinturaAltura() As String Dim ValorIndiceCinturaAltura As Double ValorIndiceCinturaAltura = Str(Replace(IndiceCinturaAltura(), ",", ".")) Debug.Print ValorIndiceCinturaAltura End Function Y en la ventana inmediato: 502994011976048 ¡Gracias!
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14025 |
Enviado: 21/Octubre/2020 a las 17:29 |
Str sustituye a Replace ...
ValorIndiceCinturaAltura = Str(IndiceCinturaAltura) De todas formas, échale un vistazo a la ayuda de Access ...
|
|
zelarra
Habitual Unido: 21/Octubre/2020 Localización: España Estado: Sin conexión Puntos: 122 |
Enviado: 21/Octubre/2020 a las 17:46 |
Efectivamente, IndiceCinturaAltura es Double, y tiene que ser Long para que funcione con Str. Sin embargo, si pongo IndiceCinturaAltura como Long, en vez de devolverme 0,5, me devuelve 1, porque no admite decimales.
|
|
Emilio
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Santander Unido: 08/Agosto/2004 Localización: España Estado: Sin conexión Puntos: 18836 |
Enviado: 21/Octubre/2020 a las 17:59 |
Hola!
me vas a perdonar, pero el poco código que muestras en un pantallazo tan grande es un despropósito. No tiene sentido manejar números y menos reales en una variable de cadena. Lo que buscas lo lograrás con cdbl cdbl(IndiceCinturaAltura) |
|
zelarra
Habitual Unido: 21/Octubre/2020 Localización: España Estado: Sin conexión Puntos: 122 |
Enviado: 21/Octubre/2020 a las 18:35 |
A ver:
Te pongo aquí toda la secuencia: Function IndiceCinturaAltura() As Double IndiceCinturaAltura = DLookup("IndiceCinturaAltura", "TPeso", "Fecha=#" & DMax("Fecha", "TPeso") & "#") End Function Function TipoIndiceCinturaAltura() As String Dim ValorIndiceCinturaAltura As Double ValorIndiceCinturaAltura = CDbl(IndiceCinturaAltura()) Debug.Print ValorIndiceCinturaAltura TipoIndiceCinturaAltura = DLookup("Tipo", "TIndiceCinturaAltura", "ValorMinimo<=" & ValorIndiceCinturaAltura & " And ValorMaximo >=" & ValorIndiceCinturaAltura) End Function Si ejecuto eso, me da este error: Se ha producido el error '3075' en tiempo de ejecución: Error de sintaxis (coma) en la expresión de consulta 'ValorMinimo <= 0,50299401 And ValorMaximo >=0,50299401'. Ahora, tirando de la Ayuda de Access, y en relación al despropósito que dices que hay. El resultado de la función IndiceCinturaAltura la declaro como Double, aunque DLookup devuelve un Variant. Ahí no sé si tendría que cambiar Double por Variant. Luego, utilizo el Replace para sustituir comas por puntos. Sí puede ser que aquí esté cometiendo otro error, porque eso es para Strings, ¿no? Pero si uso CDbl como tú dices, mira el error que me tira: las comas, ¿cómo lo arreglo entonces? Tengo puesto el Debug.Print ahí para ver qué valor coge ValorIndiceCinturaAltura. Muchas gracias a todos por vuestras respuestas.
|
|
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14025 |
Enviado: 21/Octubre/2020 a las 18:40 |
"ValorMinimo<=" & Str(ValorIndiceCinturaAltura) & " And ValorMaximo >=" & Str(ValorIndiceCinturaAltura)
|
|
zelarra
Habitual Unido: 21/Octubre/2020 Localización: España Estado: Sin conexión Puntos: 122 |
Enviado: 21/Octubre/2020 a las 18:53 |
Así sí que me funciona.
No había caído en irme a donde me estaba dando el problema. Muchas gracias a todos.
|
|
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |