Varios if con diferentes condiciones

Trataré de no enredarme a ver si me puedes ayudar:

Lo que quiero hacer es indicar el espesor de un material según las medidas del producto a armar, para eso tengo que respetar ciertos tramos, por esto, si el producto mide 150x150 el espesor deberá ser 0.5mm; son 5 tramos en total y cada uno además da una constante de cálculo, es decir si las medidas de:

Producto Material constante de calculo

de 0 a 300 =0.5 12

de 301 a 750 =0.6 14

de 751 a 1350 =0.8 20

de 1351 a 2150 =1.0 23

de 2150 => =1.2 26

Traté de hacerlo por medio de un botón que al presionar correría una serie de if; pero los resultados que me da son erráticos. Esto es lo que hago:

Tramo 1: If Me.ANCHO.Value >= 300 Then Me.Texto25.Value = 1

Tramo 2: If Me.ANCHO.Value <= 301 > 751 Then Me.Texto25.Value = 5

Tramo 3: If Me.ANCHO.Value <= 751 > 1350 Then Me.Texto25.Value = 9

Tramo 4: If Me.ANCHO.Value <= 1351 > 2150 Then Me.Texto25.Value = 8

Tramo 5: If Me.ANCHO.Value <= 2151 Then Me.Texto25.Value = 7

Con esto completo los 5 tramos solo para el ancho, hago lo mismo para el alto, luego con los valores del alto y ancho sumados le indico que me de la constante y el material correspondiente:

Tramo 1: If Me.MISUMA.Value = 0 Or 1 Or 2 Then Me.MATERIAL.Value = "0.5"

if Me.MISUMA.Value = 0 Or 1 Or 2 Then Me.CONSTANTE.Value = "12"

Tramo 2: If Me.MISUMA.Value = 5 Or 10 Then Me.MATERIAL.Value = "0.6"

If Me.MISUMA.Value = 5 Or 10 Then Me.CONSTANTE.Value = "14"

Tramo 3: ...

... Y repito este mismo paso para los 5 tramos con el fin de obtener la constante y la medida del material de los otros tramos.

¿Alguna idea para que esto funcione?

1 Respuesta

Respuesta
1

Bufff, estos problemas siempre dan mucho por saco.

Vamos a ver:

No veo claro lo de Tramo1: If Me.ANCHO.Value >= 300 Then Me.Texto25.Value = 1. Lo que no veo es lo del 1, ya que dices más arriba que la constante de cálculo es 12.

Igual para el resto de tramos.

Otra cosa. Supongamos un valor de ancho:

ancho = 200

Para tramo1 ancho (200)<300, por tanto texto25 será 1

Para tramo2 ancho (200)<301, por tanto texto25 será 5

Para tramo3 ancho (200)<751, por tanto texto25 será 9

Para tramo4 ancho (200)<1351, por tanto texto25 será 8

Para tramo5 ancho (200)<2151, por tanto texto25 será 7

Date cuenta de que realmente la condición no es correcta, porque te va cambiando el valor según la línea que se ejecuta, y se ejecutan todas.

Como lo que quieres es un intervalo, tienes que especificar un intervalo, pero hay que hacerlo bien.

Para tramo1 sería: if ancho<=300 then texto25=1

Para tramo2, sería: if ancho>=301 AND ancho <751 then texto25=5

para tramo3, sería: if ancho>=751 and ancho <1350 then texto25=9

para tramo4, sería: if ancho>=1351 and ancho <2151 then texto25=8

para tramo5, sería: if ancho >=2152 then texto=7

Pruébalo a ver que tal y me cuentas

No me funcionó ....

Tienes razón en que es mejor directamente colocar la constante en vez de =1 o 2 etc.

Creo que el problema está en que todo el resultado depende de dos cajas de texto, eso es lo que complica, es decir, se debe evaluar tanto el resultado de una como el de la otra para llegar al resultado correcto.

Estimado con estas líneas he podido pasar al segundo tramo pero no al tercero, el problema está en el "mayor que y menor que", es decir, en el segundo tramo el código alcanza a reconocer que ANCHO y ALTO deben ser mayores que 301 pero no reconoce que también deben ser menores que 750, si logro que la sintaxis para ese "mayor que y menor que" sea la correcta creo que el problema estaría resuelto.

PRIMER TRAMO

If ANCHO < 301 And ALTO < 301 Then
Me.CONSTANTE.Value = "12"

SEGUNDO TRAMO
ElseIf ANCHO >= 301 < 750 And ALTO >= 301 < 750 Then
Me.CONSTANTE.Value = "14"

TERCER TRAMO

ElseIf ANCHO >= 751 < 1350 And ALTO >= 751 < 1350 Then
Me.CONSTANTE.Value = "20"

Perdón por la tardanza, estoy muy liado últimamente.

Vamos a ver, la sintaxis es:

If...

ElseIf ((Ancho >= 301 AND Ancho <750) AND (Alto>301 and Alto <750)) Then

Me.Constante.Value="14"

Elseif ((Ancho>=751 and Ancho <1350) AND (Alto >=751 AND Alto <1350)) Then

Me.Constante.Value = "20"

Ten en cuenta que, por ejemplo, en el segundo tramo si ancho es 350 y alto es 751 no se cumplirá la condición.

Si puedes asegurar que siempre que ancho esté entre unos parámetros, alto siempre estará entre los parámetros que corresponden a ese ancho, bien, sino tendrás que hacerlo de otro modo, primero mirando el ancho y después el alto:

If Ancho....

If Alto ...

ElseIf Alto...

ElseIf Alto...

Else

Endif

ElseIf Ancho ...

If Alto...

ElseIf Alto ...

...

Y así sucesivamente

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas