** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - [Resuelto] Problema con punto y coma de decimales
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerrado[Resuelto] Problema con punto y coma de decimales

 Responder Responder
Autor
Mensaje
zelarra Ver desplegable
Habitual
Habitual


Unido: 21/Octubre/2020
Localización: España
Estado: Sin conexión
Puntos: 122
Enlace directo a este mensaje 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
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14025
Enlace directo a este mensaje 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) & " .....
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
zelarra Ver desplegable
Habitual
Habitual


Unido: 21/Octubre/2020
Localización: España
Estado: Sin conexión
Puntos: 122
Enlace directo a este mensaje 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!
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14025
Enlace directo a este mensaje 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 ...
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
zelarra Ver desplegable
Habitual
Habitual


Unido: 21/Octubre/2020
Localización: España
Estado: Sin conexión
Puntos: 122
Enlace directo a este mensaje 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.
Arriba
Emilio Ver desplegable
Administrador
Administrador

Santander

Unido: 08/Agosto/2004
Localización: España
Estado: Sin conexión
Puntos: 18836
Enlace directo a este mensaje 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


Saludos a todos desde Huelva

http://www.mvp-access.es/emilio/
Arriba
zelarra Ver desplegable
Habitual
Habitual


Unido: 21/Octubre/2020
Localización: España
Estado: Sin conexión
Puntos: 122
Enlace directo a este mensaje 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.
Arriba
Mihura Ver desplegable
Administrador
Administrador
Avatar

Unido: 06/Mayo/2005
Localización: En la dehesa
Estado: Sin conexión
Puntos: 14025
Enlace directo a este mensaje Enviado: 21/Octubre/2020 a las 18:40
"ValorMinimo<=" & Str(ValorIndiceCinturaAltura) & " And ValorMaximo >=" & Str(ValorIndiceCinturaAltura)
Jesús Mansilla Castells.
Saludos desde Móstoles.

Access Aplicaciones
Tecsys.es
Arriba
zelarra Ver desplegable
Habitual
Habitual


Unido: 21/Octubre/2020
Localización: España
Estado: Sin conexión
Puntos: 122
Enlace directo a este mensaje 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.
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable