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
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
- Compartir respuesta