Aviso al abrir formulario varias condiciones

Quería que me ayudaran con el diseño de un aviso al abrir un formulario, me gustaría que me diera el aviso y me muestre un informe con dos condiciones para que me muestre los registros, las condiciones son, que si la fecha del día que te conectes si es superior a 7 días de diferencia con fechapago y la otra es que no este relleno el campo licsol.

1 respuesta

Respuesta
3

Iñigo: No sé si interpreto bien tu pregunta, pero si es generar un mensaje...

Te pongo el código para el Evento Form_Load

Private Sub Form_Load()
If DateDiff("d",Me.FechaPago,Date) > 7 Or IsNull(Me.LicSol) Then
   MsgBox "Faltan datos para abrir el Informe",vbCritical,"MIRA LOS DATOS"
Else
   Docmd.OpenReport....
End If

Los Nombres de los Controles he puesto los que citabas. Saludos >> Jacinto

Jacinto aquí perfecto, ya casi lo tengo pero me queda pulir una cosilla que no se como irá. Como ves he cambiado un poco el código a mi gusto:

If DateDiff("d", Me.ACEPTACION, Date) > 7 Or IsNull(Me.LICTRAMITES) Then

Dim resp As Integer

resp = MsgBox("Existen expedientes que llevan más de 7 días pagados en espera de solicitar a trámite la licencia" _

                    & vbCrLf & vbCrLf & "¿Desea ver un informe con los números de expedientes?" _

                    , vbInformation + vbYesNo, "AVISO")

                If resp = vbYes Then

                    DoCmd.OpenReport "CDatos", acPreview

                End If

End If

Si lo dejo así, cuando hay registros que cumplen ambas me los llevan al informe pero si no hay registros me sigue llevando igual al informe pero en blanco. Si cambio el OR por AND en la primera línea de código, me funciona bien pero no me saca el msgBox. Gracias y a ver si lo solucionamos

Jacinto aquí perfecto, ya casi lo tengo pero me queda pulir una cosilla que no se como irá. Como ves he cambiado un poco el código a mi gusto:

If DateDiff("d", Me.ACEPTACION, Date) > 7 Or IsNull(Me.LICTRAMITES) Then

Dim resp As Integer

resp = MsgBox("Existen expedientes que llevan más de 7 días pagados en espera de solicitar a trámite la licencia" _

                    & vbCrLf & vbCrLf & "¿Desea ver un informe con los números de expedientes?" _

                    , vbInformation + vbYesNo, "AVISO")

                If resp = vbYes Then

                    DoCmd.OpenReport "CDatos", acPreview

                End If

End If

Si lo dejo así, cuando hay registros que cumplen ambas me los llevan al informe pero si no hay registros me sigue llevando igual al informe pero en blanco. Si cambio el OR por AND en la primera línea de código, me funciona bien pero no me saca el msgBox. Gracias y a ver si lo solucionamos

Iñigo: Prueba con ésto si se cumple lo que te comento abajo

Private Sub Form_Load()
If DateDiff("d",Me.ACEPTACION,Date) > 7 Or IsNull(Me.LICTRAMITES) Then
   MsgBox "Faltan datos para abrir el Informe",vbCritical,"MIRA LOS DATOS"
Else
   DoCmd.OpenReport "CDatos", acPreview
   If MsgBox("Deseas enviar a impresión?", vbYesNo) = vbYes Then
      DoCmd.OpenReport "CDatos"
   End If
End If

Tal como lo has puesto, siempre que:

1ª Condición: Restamos Hoy - ACEPTACION  >> Ejemplo 14/11/2016 -01/11/2016 = 13

*Se cumplirá la condición y sea lo que sea LICTRAMITES, te va a saltar a la Pregunta.

Si le respondes que "SI", te va a abrir el Informe con o sin datos.

Si La diferencia fueran 3 y LICTRAMITES no está vacío, haces cuenta que el código no existe, porque salta al último End If.

Con ésta ampliación yo me he confundido un poco, porque mi primera contestación creí que recogía tu necesidad.

Si lo que pretendes es mandarlo o no a Imprimir, yo pondría el código de arriba. Saludos >> Jacinto

a ver creo que no nos entendemos, yo quiero que al abrir un formulario me salga un aviso siempre cuando haya algún registro que cumpla AMBAS condiciones y son DateDiff("d", Me.ACEPTACION, Date) > 7 y IsNull(Me.LICTRAMITES).

Necesito que solo me salte el aviso cuando se cumplan esas dos.

Ahora mismo con el código que tengo me salta el aviso siempre, aunque no haya registros que cumplan las dos condiciones a la vez. Espero puedan ayudarme.

Iñigo: Para sondear que se cumplan las dos condiciones a la vez, has de poner AND y no OR.

Sobre lo que citas...cuando haya algún registro que cumpla AMBAS condiciones...

He de imaginar, por imaginar algo que se trata de un Formulario Continuo, porque con un Formulario de columnas ( 1 solo Registro), es ese "único", el que sondea en el Evento Load.

Si lo que pretendes es ver los "Registros de la Tabla" que sirve de Origen de Datos al Formulario en los que falten los dos valores, eso es otro tema. Ya me contarás. Saludos >> Jacinto

Ya te entendí y estas en lo cierto, es lo que dices, necesito que me haga un barrido por todos los registros de mi tabla y me saque el aviso si alguno de ellos cumple ambas condiciones, entonces no se como programarlo... seria algo así...:

Dim rst As Recordset

    Dim vACEPT As Date

    Dim vAhora As Date

    Dim vTRAMIT As Date

    vAhora = Date

    Set rst = CurrentDb.OpenRecordset("TDatos", dbOpenSnapshot)

    If rst.RecordCount = 0 Then GoTo salida

    Do Until rst.EOF

If y las dos condiciones...(que no sé cómo ponerlas si lo hago así).

Si me pudieras ayudar con el código... ¿o cómo lo pondrías tu? Mil gracias de nuevo!

Iñigo: La idea del Recordset, es buena, pero en éste caso yo usaría una consulta, que luego me sirva como Origen de Datos de un Informe, que creo que ya lo tienes.

En una consulta en Vista de SQL, le pegas éste código.

SELECT TDatos.Xxxxxxx, TDatos.Yyyyyyyy, TDatos.Zzzzzzzzzzz, TDatos.ACEPTACION,  TDatos.LICTRAMITES
FROM TDatos
WHERE ((DateDiff("d",[ACEPTACION],Date())>7) AND ((TDatos.LICTRAMITES) Is Null));

Los valores de Xxxxx,Yyyyyyyy y Zzzzzz, los he puesto de Ejemplo. Si quieres los sustituyes por 3 Nombres de tu Tabla o los quitas .......

Suponiendo que a ésta consulta le llames QryNulos, y que la haces servir como Origen de Datos del Informe que citabas, el Código en el Form_Load sería:

Private Sub Form_Load
If Nz(DCount(“*”, “QryNulos”),0) >0 Then
DoCmd.OpenReport "CDatos", acPreview
       If MsgBox("Deseas enviar a impresión?", vbYesNo) = vbYes Then
              DoCmd.OpenReport "CDatos"
    End If
Else
    MsgBox “No hay nulos para mostrar”,vbInformation,”CONSULTA SIN DATOS”
End If
End Sub

Espero sea tu solución. Mis saludos >> Jacinto

Me va perfecto así pero quiero poner dos avisos seguidos, copio el código de uno a continuación del otro y me saltan los avisos, el problema es que en el segundo aviso da lo mismo si le doy a SI o No ya que me hace lo que haya elegido SI o NO del primer aviso, no se si me puedes terminar de ayudar aquí. Muchas gracias

Iñigo: Claro que puedo ayudarte, si tu me comentas, ese 2º aviso en base a qué lo quieres supeditar, ya que la consulta solo devolverá los Registros que cumplan las condiciones que comentaste. Quizá debes plantearte la Construcción de una bateria de Filtros, pero en eso solo te podría sugerir como hacerlo teniendo claro el Objetivo y con los Objetos delante. Saludos >> Jacinto

un aviso igual que el anterior pero con la condición en lugar de 7 días de diferencia que sea solo 1.

Y con otro cuadro de texto nulo en lugar de el del primer aviso. Gracias.

Iñigo: Si no quieres ir creando consultas distintas, que es una solución, la metodología cambia bastante. Mi sugerencia sería que hagas otra pregunta sobre algo así como: Establecer varios Filtros sobre una consulta con VBA y pudes beneficiarte de más de una respuesta, ya que con tanta literatura en ésta dudo que haya muchos que la lean.

Si tengo un hueco, intento mirarlo. Mis saludos >> Jacinto

¡Gracias! Nada, tenia un pequeño error en el código y ya lo arregle con otra consulta, así no me lío. Muchas gracias como siempre!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas