Abrir un formulario continuo con botón de comando y filtrado con fecha.

En un formulario de arqueo de caja tengo un botón de comando que abre un formulario para ver los gastos coincidentes con la fecha de arqueo que está en pantalla. Me funciona bien, excepto el MsgBox “No hay gastos en el día de hoy.” Si no hay gastos en la fecha del arqueo no muestra ningún registro, como es lógico, pero me abre el formulario. Lo que quiero impedir es que no se abra el formulario si no hay registros coincidentes con la fecha de arqueo y me lance el MsgBox. He probado en quitar el filtro de la fecha y sí que me lanza el mensaje si no hay registros, pero no es lo que quiero. ¿Es posible que este código no sea el apropiado para lo que quiero?

Muchas gracias! Y espero haberme explicado bien.

Xavier.

Private Sub cmdGastos_Click()

If IsNull(Me.FechaArqueo) Or Me.FechaArqueo = "" Then

MsgBox "Introducir la fecha de arqueo.", vbInformation, "FECHA DE ARQUEO REQUERIDA"

FechaArqueo.SetFocus

Else

Dim rst As DAO.Recordset

Dim misRegistros As Integer

Set rst = CurrentDb.OpenRecordset("conGastosDiarios")

misRegistros = rst.RecordCount

rst.Close

Set rst = Nothing

If misRegistros = 0 Then

MsgBox "No hay gastos en el día de hoy.", vbInformation, "GASTOS DEL DÍA" 

Else 

DoCmd.OpenForm "frmGastosDiarios", , , "FechaGasto = # " & Format(Me.FechaArqueo, "mm/dd/yyyy") & " #" 

End If

End If

End Sub

4 Respuestas

Respuesta
-1
Respuesta
2

Viendo el código no me cuadra que te salga el mensaje de "No hay gastos en el día de hoy" y se te abra el formulario, porque al estar dentro de las dos partes diferentes del If... then... else, es imposible que se ejecuten ambas lineas de código. A no ser que tengas en otro lado algo que te abra el formulario...

Hola, gracias por tu atención. Quizás no me he explicado bien: cuando no hay registros coincidentes con la fecha del arqueo no me aparece el MsgBox diciéndome que "No hay gastos el el día de hoy". Pero sí que me abre el formulario sin ningún registro, puesto que no hay gastos que coincidan con la fecha del arqueo. El problema es el MsgBox, que sin haber registros en la fecha indicada el mensaje no aparece. Muchas gracias!

Saludos!

Imagino que tu problema viene porque la consulta a la que miras si devuelve registros no está filtrada por la fecha.

Puedes solucionarlo poniendo como criterio en la consulta el cuadro de texto de tu formulario, o bien abriendo el recordset filtrado por esa fecha.

Gracias de nuevo. En el transcurso de mañana lo probaré. 

Buenas noches. 

Lo único que no me funciona es el MsgBox, cuando no hay registros en la fecha indicada no me aparece ninguno, esto es correcto, pero se abre el formulario en blanco, y lo que no funciona es que el cuadro de mensaje no aparece y no impide que se muestre el formulario en blanco. El filtro de fechas funciona correctamente.

Gracias y disculpa las molestias.

Xavier.

Si no te lanza el mensaje y te abre el formulario es simplemente porque no se te cumple la condición del IF, a saber: misRegistros = 0

Eso significa que la variable misRegistros tiene un valor distinto de 0, lo que me lleva a insistir en mi última respuesta:

Imagino que tu problema viene porque la consulta a la que miras si devuelve registros no está filtrada por la fecha.

Cuando abres el recordset sobre la consulta para hacerle el RecordCount (y ver si tiene o no registros), lo haces directamente con el nombre de la misma. Si esa consulta no está filtrada por la misma fecha del cuadro de texto FechaArqueo de tu formulario, está clarísimo que devolverá registros aunque no sean de esa fecha, con lo que tu comparación se va al garete...

Como te decía, o bien filtras la consulta vinculándola al cuadro del formulario, o abres el recodset sobre la consulta filtrada, con una SQL con un WHERE...

Me sabe mal hacerte perder tanto tiempo. Si no hay registros no me los muestra, esto es correcto, el filtro de la fecha sí que funciona. Pero me abre el formulario en blanco y no me lanza el MsgBox para impedir que no se abra.

Gracias de nuevo! en el transcurso del día pondré en práctica tu recomendación.

Mil gracias!

Cambia esta línea:

Set rst = CurrentDb.OpenRecordset("conGastosDiarios")

por esta otra:

Set rst = CurrentDb.OpenRecordset("SELECT * FROM conGastosDiarios WHERE FechaGasto = # " & Format(Me.FechaArqueo, "mm/dd/yyyy") & "#")

Así te tiene que funcionar todo correctamente

Esto es lo que quería!!! Mil gracias! Tengo poco tiempo para aprender, un poquito, en VBA. Pero cada día aprendo algo. Gracias de nuevo.

Saludos!!!

Xavier.

Respuesta
2

Javier: Así a primera vista, si no quieres que te salga el mensaje, donde tienes >>

MsgBox "No hay gastos en el día de hoy.", vbInformation, "GASTOS DEL DÍA" 

Lo sustituyes por

Rst. Close

Set rst = Nothing

Exit Sub

Quitando el Rdt. Close y el Se Rst... de donde los tienes

Un saludo >> Jacinto

Gracias Jacinto, mañana lo pondré en práctica y te diré.

Saludos!

Hola de nuevo, no me funciona correctamente. El código sí que filtra las fechas pero cuando no hay gastos en la fecha coincidente se abre el formulario en blanco correctamente, pero lo que quiero es que no se abra el formulario si no hay gastos en la fecha coincidente y el MsgBox me impida abrir dicho formulario. Es el mensaje que no se abre cuando no hay registros coincidentes con la fecha.

Gracias!

Javier: Veo que vas siguiendo con Sveinbjorn e Icue el problema y que avanzáis.

Un saludo >> Jacinto

Respuesta
1

Para que cuando no haya registros en un formulario no se abra, en sus propiedades-eventos-al cargar puedes poner

Private Sub Form_Load()
If Me.Recordset.EOF And Me.Recordset.BOF Then
MsgBox "¡Para que abrirlo si no hay registros", vbOKOnly, "Hasta luego"
DoCmd.Close acForm, "nombredeesteform"
End If
End Sub

Gracias Icue, en cuanto tenga un momento lo comprobaré. 

El problema es que al abrirlo a través de un botón no se abra el formulario si no hay registros coincidentes con la fecha de arqueo. Funciona bien, pero es el MsgBox que no impide que se abra el formulario sin hay registros coincidentes. Cuando abro el formulario de gastos directamente (sin botón de comando) sí que quiero ver todos los registros.

Gracias y disculpa las molestias.

Si tengo un formulario 1 con dos botones. En el de arriba le digo

DoCmd.OpenForm "clientes", , , "pais=""AAAA"""

Como no hay ningún país con ese nombre, me aparece lo de 

Acepto y el formulario Clientes no llega a abrirse

Sin embargo si pulso el botón de abajo, como si hay clientes de Alemania

Como ves no me aparece ningún mensaje

Y en el evento Al cargar del formulario Clientes le tengo puesto lo que te dije.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas