Establecer valor en base a criterios |
Responder |
Autor | ||||||||||||||||||||||||||||||||||||||||||||||
Dany Solis
Colaborador Unido: 23/Octubre/2010 Localización: Cd. Juarez Méx Estado: Sin conexión Puntos: 912 |
Tema: Establecer valor en base a criterios Enviado: 29/Octubre/2020 a las 23:34 |
|||||||||||||||||||||||||||||||||||||||||||||
Buenas tardes noches a todos,
Tengo la siguiente función que en su momento me fue proporcionada en este foro y va de maravilla, el problema que se me presenta ahora es que necesito obtener los valores de medida en base a lo que el usuario tenga declarado en una tabla, algo así: Función:
Tabla: https://ibb.co/4KKwb5K Alguna idea, para obtener los mismos resultados pero ahora basados en el valor de la tabla? Saludos DS |
||||||||||||||||||||||||||||||||||||||||||||||
Donde hay educación, no hay distinction de clases. (Confusio)
Dany Solis |
||||||||||||||||||||||||||||||||||||||||||||||
xavi
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 Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: en línea Puntos: 14738 |
Enviado: 30/Octubre/2020 a las 00:33 | |||||||||||||||||||||||||||||||||||||||||||||
A lo mejor es la hora pero esa función que has puesto, cuando Tipo1 no es ni "Completo" ni "Segmentado", creo que solo devolverá 3 o 0. Si el valor de Medida1 supera 1, tomará valor 3, si no supera 1 no superara ni 10 ni 15 por lo que nunca deberia entrar en los ElseIf y solo entraría en el Else final (o sea, 0)
Lo que yo haría seria buscar el primer registro de la tabla dónde LongMin fuera > que Medida1 y recuperaría el valor de desfase. Lo haría con un recordset ya que DFirst no me devuelve el valor esperado. Sería tomando un solo valor que estuviera por encima de 0 y por debajo de la medida. Algo así: strSQL = "SELECT TOP 1 Desfase FROM Tabla WHERE LongMin>0 And LongMin < " & Medida1 Un saludo
|
||||||||||||||||||||||||||||||||||||||||||||||
Dany Solis
Colaborador Unido: 23/Octubre/2010 Localización: Cd. Juarez Méx Estado: Sin conexión Puntos: 912 |
Enviado: 30/Octubre/2020 a las 02:40 | |||||||||||||||||||||||||||||||||||||||||||||
Pero son tres valores, esa función toma el valor que queda libre por ejemplo:
Completo y Segmentado son por default 0, pero el valor que queda a evaluar es SemiParcial y hasta el momento tiene tres variantes. SemiParcial >1 entonces, 3 SemiParcial >=15 entonces, 5 SemiParcial >=20 entonces, 8 Con la propuesta que me das solo tomaría un solo valor, es correcto? DS |
||||||||||||||||||||||||||||||||||||||||||||||
Donde hay educación, no hay distinction de clases. (Confusio)
Dany Solis |
||||||||||||||||||||||||||||||||||||||||||||||
xavi
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 Terrassa-BCN Unido: 10/Mayo/2005 Localización: Catalunya |||| Estado: en línea Puntos: 14738 |
Enviado: 30/Octubre/2020 a las 08:34 | |||||||||||||||||||||||||||||||||||||||||||||
Tu primera función solo devuelve:
- Si Completo -->0 - Si Segmentado --> 0 - Si Semiparcial tiene 2 alternativas - Meyor que 1 --> 1 - En cualquier otro caso (menor o igual a 1) --> 0 Porque, a mi entender, NUNCA entrará en los ElseIf ya que cualquier numero mayor que 1 cumple con la primera y, por consecuencia, no entraria en las siguientes. En definitiva, tu función SOLO devuelve un número (ya no entro a valorar que utilices un Long para un número que podría ser sencillamente un Byte) En mi caso parto de la tabla que suministras y creo una consulta que me devuelva 1 solo registro dónde LongMin sea Mayor que 0 y menor que el valor de Medida1 dado. Lo único que me ha fallado es que debería haber ordenado el campo LongMin de forma descendente: strSQL = "SELECT TOP 1 Desfase FROM Tabla WHERE LongMin>0 And LongMin < " & Medida1 & " ORDER BY LongMin DESC" Prueba y nos cuentas |
||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
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: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5974 |
Enviado: 30/Octubre/2020 a las 12:40 | |||||||||||||||||||||||||||||||||||||||||||||
Tal como indica Xavi, las condiciones están mal ordenadas.
Ten presente que ElseIf sólo funciona si la condición anterior NO se cumple. RT_Clase1 = 0 ElseIf medida1 < 10 Then
RT_Clase1 = 3
ElseIf medida1 < 15 Then
RT_Clase1 = 5
Else
RT_Clase1 = 8
End If ... aunque realmente basta
con una sola línea: Nota:
son sumandos porque Verdadero (TRUE)
en VBA es negativo (-1). |
||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
||||||||||||||||||||||||||||||||||||||||||||||
AnSanVal
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: 16/Marzo/2005 Localización: España Estado: Sin conexión Puntos: 5974 |
Enviado: 30/Octubre/2020 a las 12:56 | |||||||||||||||||||||||||||||||||||||||||||||
Estos son (también) los resultados «con una sola línea».
|
||||||||||||||||||||||||||||||||||||||||||||||
Saludos desde Tenerife.
|
||||||||||||||||||||||||||||||||||||||||||||||
Dany Solis
Colaborador Unido: 23/Octubre/2010 Localización: Cd. Juarez Méx Estado: Sin conexión Puntos: 912 |
Enviado: 04/Noviembre/2020 a las 05:25 | |||||||||||||||||||||||||||||||||||||||||||||
Tenían razón he adecuado el código y va bien.
Gracias a los dos, este hilo se puede cerrar. DS |
||||||||||||||||||||||||||||||||||||||||||||||
Donde hay educación, no hay distinction de clases. (Confusio)
Dany Solis |
||||||||||||||||||||||||||||||||||||||||||||||
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 |