** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - IF anidados
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Tema cerradoIF anidados

 Responder Responder Página  12>
Autor
Mensaje
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 464
Enlace directo a este mensaje Tema: IF anidados
    Enviado: 28/Octubre/2016 a las 23:17
Hola a todos, la verdad por mas que lo he intentado no me esta funcionando lo siguiente:


1 If Forms!principal!Blanco![Sub_ OT]!RECH = "SI" Then

2 If IsNull(Forms!principal!Blanco![Sub_ OT]!Observaciones) Then

MsgBox "No ha colocado las razones para el rechazo.", vbExclamation, ""
DoCmd.CancelEvent
Else

3 If IsNull(Forms!principal!Blanco![Sub_ OT]!OT) Then
MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""
Else

4 If IsNull(Forms!principal!Blanco![Sub_ OT]!Fecha_OT) Then
MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""

Else

5 MsgBox "Enviar correo", vbExclamation, ""
Forms!principal.Comando253_Click
End If
End If
End If
End If

Si se cumple lo del IF 1, entonces evalua lo del IF 2, y una vez verificado eso deberia continuar con el 3 y 4, y posteriormente deberia terminar con el punto 5. Pero todo funciona solo si el IF 1 se cumple, es decir no hace el 5 si en el IF 1 existe un NO.


Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
mounir Ver desplegable
Colaborador
Colaborador


Unido: 09/Febrero/2009
Localización: Asturias-España
Estado: Sin conexión
Puntos: 5326
Enlace directo a este mensaje Enviado: 28/Octubre/2016 a las 23:34
Hola!

Creo que tienes que cerrar las If anidadas antes del ultimo Else, alfo así:

1     If Forms!principal!Blanco![Sub_ OT]!RECH = "SI" Then




2     If IsNull(Forms!principal!Blanco![Sub_ OT]!Observaciones) Then




     MsgBox "No ha colocado las razones para el rechazo.", vbExclamation, ""

     DoCmd.CancelEvent

     ElseIf IsNull(Forms!principal!Blanco![Sub_ OT]!OT) Then

     MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""

     ElseIf IsNull(Forms!principal!Blanco![Sub_ OT]!Fecha_OT) Then

     MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""


    End If


     Else


    MsgBox "Enviar correo", vbExclamation, ""

     Forms!principal.Comando253_Click

     
     End If

A ver si así funciona.

Edito para modificar el código.
Un Saludo.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5300
Enlace directo a este mensaje Enviado: 28/Octubre/2016 a las 23:42
Hola Alex, buenas noches.

¿Sabes lo que es la identación:?


Yo lo tengo entendido así:

'1
If Forms!principal!Blanco![Sub_ OT]!RECH = "SI" Then
    '2
    If IsNull(Forms!principal!Blanco![Sub_ OT]!Observaciones) Then
        MsgBox "No ha colocado las razones para el rechazo.", vbExclamation, ""
        DoCmd.CancelEvent
    '2
    Else
            '3
            If IsNull(Forms!principal!Blanco![Sub_ OT]!OT) Then
                MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""
            '3
            Else
                    '4
                    If IsNull(Forms!principal!Blanco![Sub_ OT]!Fecha_OT) Then
                        MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""
                    '4
                    Else
                        MsgBox "Enviar correo", vbExclamation, ""
                        Forms!principal.Comando253_Click
                    '4
                    End If
            '3
            End If
    '2
    End If
'1
End If


Quiero decir con esto, que de la forma que tu lo estás poniendo, cualquiera de los If que hay dentro del '1, tan solo se ejecutarán si OTRECH es igual a "SI", ya que si no es "SI", se va al End If, que yo he enumerado como:
'1
End If

Por favor, repasa el concepto que tienes de If --- End If y procura identar ese código de otra forma.

Saludos
Gracias
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 464
Enlace directo a este mensaje Enviado: 28/Octubre/2016 a las 23:48
Hola Mounir, lo modifique como me dices, pero ahora no evalua nada, solo pasa de inmediato al punto 5.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 464
Enlace directo a este mensaje Enviado: 28/Octubre/2016 a las 23:53
Hola Vimipas, ese es el problema, lo que no se es como resolverlo, lo que se supone que requiero es que evalue el punto uno antes de evaluar lo demas, y si se cumple que evalue el 2, pero igual si no se cumple el 1 que el sistema evalue el 3 y 4 para al final pasar al 5.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 464
Enlace directo a este mensaje Enviado: 28/Octubre/2016 a las 23:56
Yo he asumido que el ELSE, es para que continué con lo siguiente después de que se cumpla o no lo anterior.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5300
Enlace directo a este mensaje Enviado: 29/Octubre/2016 a las 13:51
Hola de nuevo, analicemos pues lo que quieres:

Hola Vimipas, ese es el problema, lo que no se es como resolverlo, lo que se supone que requiero es que evalue el punto uno antes de evaluar lo demas, y si se cumple que evalue el 2, pero igual si no se cumple el 1 que el sistema evalue el 3 y 4 para al final pasar al 5.

Bien, parto de una idea inicial, NO SUPONGO QUE REQUIERES, sino que LO QUE QUIERES ES:

'Identemos
'1
If el punto 1 es =SI Then
     'Como si que se cumple, porque es SI: Evaluemos el 2.
       '2
       If el punto 2 es Then

       '2
       Else

       '2
       End If
'1
Else 'Pero igual, si no se cumple el 1, que el sistema evalue 3,4,5... por eso estamos aquí, por que no se cumple el 1

      '3
      If tal y cual then
      
     '3
     'Else

     '3
     End If

      '4
      If tal y cual then
      
     '4
     'Else

     '4
     End If

      '5
      If tal y cual then
      
     '5
     'Else

     '5
     End If

'1
End If

Para mi es el huevo de Colón. No se porque me da a mi que tu lo que quieres no es esto, sino otra cosa. Pero bueno, dejaré que tu lo digas.

Saludos
Gracias
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 464
Enlace directo a este mensaje Enviado: 29/Octubre/2016 a las 18:37
Hola, no entiendo lo que haces, estas explicando por segunda vez el problema que se que tengo, y también se lo que requiero o quiero y ese es el problema, que no funciona.

PD: no se que significa el huevo de colon.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5300
Enlace directo a este mensaje Enviado: 29/Octubre/2016 a las 21:59
Hola de nuevo.

El huevo de Colón:


Llegados a este punto, tal vez es mejor que lo explique otro componente del foro, no vaya a ser vimipas (yo) el que está atrancado y no lo veo. Dejemos que otro punto de vista nos ilumine a ambos y me sirva para aprender a mi también.

Mis disculpas Alex.

Saludos.
Gracias
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 464
Enlace directo a este mensaje Enviado: 29/Octubre/2016 a las 22:50
Hola, gracias de todos modos, ya lo resolví, dividí las ejecuciones entre dos botones con nombres iguales, uno oculto, y cuando se cumple lo requerido, esconde ese y continua en el otro. Lo importante es que me funciona. Ya se puede cerrar el hilo.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
VIMIPAS Ver desplegable
Colaborador
Colaborador
Avatar

Unido: 06/Enero/2006
Localización: ESPAÑA
Estado: Sin conexión
Puntos: 5300
Enlace directo a este mensaje Enviado: 30/Octubre/2016 a las 13:44
Hola Alex.

Supongo que no te importará poner los dos códigos que usas ahora con los dos botones, seguro que así el próximo que lea este hilo sabrá con mas certeza por donde tirar.

Yo concretamente, ya te lo agradezco incluso antes de que lo pongas, porque aquí donde ves, todavía sigo aprendiendo, que para eso está el foro.

Saludos
Gracias
Arriba
Tikimore Ver desplegable
Moderador
Moderador


Unido: 02/Enero/2008
Localización: España
Estado: Sin conexión
Puntos: 1519
Enlace directo a este mensaje Enviado: 30/Octubre/2016 a las 18:14
Hola.
Según entiendo quieres hacer unas comprobaciones antes de ejecutar el código de un botón.
Yo lo haría así:


If Forms!principal!Blanco![Sub_ OT]!RECH = "SI" Then

If IsNull(Forms!principal!Blanco![Sub_ OT]!Observaciones) Then
MsgBox "No ha colocado las razones para el rechazo.", vbExclamation, ""
Exit sub
End if

If IsNull(Forms!principal!Blanco![Sub_ OT]!OT) Then
MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""
Exit sub
        End If

If IsNull(Forms!principal!Blanco![Sub_ OT]!Fecha_OT) Then
MsgBox "No ha diligenciado el número de OT.", vbExclamation, ""
Exit sub
End if

MsgBox "Enviar correo", vbExclamation, ""
Forms!principal.Comando253_Click
Else
MsgBox "Aqui lo que queramos si el valor es NO.", vbExclamation, ""
End If
Arriba
deneg_nhj Ver desplegable
Habitual
Habitual
Avatar

Unido: 03/Septiembre/2012
Localización: Mexico
Estado: Sin conexión
Puntos: 106
Enlace directo a este mensaje Enviado: 30/Octubre/2016 a las 20:39

Aún cuando ya lo resolvieron, otra manera de hacer esto es la siguiente:

sub sbHacerAlgo

If <Primeracondicion> = False then
'-- Pues algo no se cumplió!
Exit sub '-- Salimos
End if

'-- Si estoy aquí es porque la primera condición es verdadera, cierto?
'-- Aquí va código
'-- más código
'-- más código...


If <SegundaCondicion> = False then
goto Evalua3a
End if

'-- más código
'-- más código...

Evalua3a:

If <TerceraCondicion> = False then
goto Evalua4a
End if

'-- Si estoy aquí es porque la tercera condición es verdadera, cierto?
'-- y así seguimos con el resto de las evaluaciones
...
...
...
Evalua4a:

'-- Al llegar acá todas las evaluaciones fueron correctas

End Sub

Saludos!
deneg



Especializado en Microsoft Access, SQL SERVER y Excel
Arriba
alexmubo Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 15/Diciembre/2010
Localización: Colombia
Estado: Sin conexión
Puntos: 464
Enlace directo a este mensaje Enviado: 03/Noviembre/2016 a las 00:14
Hola, voy a probar las dos opciones que me han planteado y les cuento si me han funcionado, pues es mejor todo en un código, que la solución que tengo, aunque es completamente transparente para el usuario, no me gusta ya que es simplista.
Dejar que todos den sus ideas es mas inteligente que pensar que uno se las sabe todas.
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 5044
Enlace directo a este mensaje Enviado: 03/Noviembre/2016 a las 00:36
En la mayoría de los casos lo mas simple es lo mejor LOL
Arriba
 Responder Responder Página  12>
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable