Formulario mostrar 1 registro cada 10 / 20 segundo

Tengo un formulario que recorre todos los registros 1 a 1, pero para que se detenga en cada uno tengo un mensaje que cuando acepto pasa al siguiente, hasta a qui bien, lo que pretendo es poner un botón que al aceptar pase al siguiente registro y al finalizar que cierre automaticamente el formulario gracias de nuevo . Como lo agó

2 Respuestas

Respuesta
1

No parece un problema complicado:

1.- Al pulsar el botón (incluso con una macro) se avanza al siguiente registro.

2.- En el evento Current (al cambiar de registro) se compara el registro actual con el numero de registros que tiene y cuando el actual sea igual o superior a la cuenta de registros, simplemente se cierra (sea con macro o VBA).

También se podría automatizar para que cada xx segundos avanzase de registro y al final se cierre.

Hola Enrique gracias por tu pronta respuesta , aquí  te dejo el codigo que tengo en VBA

Lo que pretendo es quitar el mensaje  que lo detiene, y que cuando pulse aceptar pase al siguiente registro ¿ no se si me esplique  dime que ago mal - gracias de nuevo .

Private Sub ACEPTAR_Click()

Dim Reg As DAO.Recordset
Set Reg = Me.Recordset

Do While Not Reg.EOF

If pagado = "NO pagadO" Then
MsgBox "", vbCritical, "Factura pendiente"
Beep
Reg.MoveNext
End If
Loop
DoCmd.Close

DoCmd.OpenForm "GESTIÓNFACTURA"
End Sub

El mensaje exige que se interactúe con el (se pulse uno de sus botones).
Una posible solución es crear un cuadro de texto con el mismo texto que el del mensaje y hacerlo visible/invisible a voluntad.

No tengo nada claro lo que se pretende con este evento:

0.- Al pulsar un botón
1.- Se dimensiona un Recorset
2.- Se le asigna el mismo origen de datos que el del formulario actual ¿?
3.- Inicia un bucle que recorre el Recodset hasta el final
4.- Se hace una comparación
... esto no me cuadra: ¿De dónde sale 'pagado'?
..- Si se cumple una condición envía un mensaje de advertencia
..- Al responder al mensaje suena un pitido de aviso
..- Se desplaza al siguiente registro

5.- Se finaliza la condición
6.- Se finaliza el bucle
7.- Se cierra algo (normalmente el objeto activo)
8.- Se abre un formulario
9.- Finaliza el evento

No debería funcionar, solo se mueve al siguiente registro si se cumple la condición por lo que con toda probabilidad el bucle no funcione y lo que tenga el bucle no se evalúa, tampoco se aprecia una referencia a un dato del Recorset (Reg).

Para que el bucle funcione, lo mínimo a modificar es poner 'Reg. MoveNext' detrás del 'End IF' y no delante.

Seria interesante aclarar la condición, en principio parece que es una variable que no tiene ninguna relación con el Recordset.

Respuesta
2

Observe este ejemplo donde recorro el formulario,

Si hago clic en el botón Recorrer comienza a desplacerse de un registro a otro (tengo a 1 segundo la pausa, pero la puede cambiar el código). Al hacer clic en Abortar para el proceso

Código del botón recorrer

Private Sub btnRecorre_Click()
  Dim cant As Long
  Dim x As Long
  abortar = False
  cant = DCount("*", "facturas")
  For x = 1 To cant
     DoCmd.GoToRecord , , acNext
     pausasec (1)
     If Me.abortar Then
       Exit For
     End If
  Next x
End Sub

Si quiere aumentar la pausa a 5 cambie el número en esta línea así:

pausasec(5)

Copie esto código en un módulo

CÓDIGO DE LA FUNCIÓN

#If VB7 Then
  Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milleseconds As LongPtr)
#Else
 Public Declare Sub Sleep Lib "kernel32" (ByVal Milleseconds As Long)
#End If
Public Sub pausasec(Numseg As Long, Optional AlloEvents As Boolean = True)
  Dim x As Integer
  For x = 1 To Numseg
   Sleep 1000
   DoEvents
  Next x
End Sub

Igualmente puede incluirlo al clonar el formulario

Si quiere cerrar el formulario adicione esta línea después del for next, algo como;

DoCmd. Close

¡Gracias! 

Modifiqué el ejemplo para activar un aviso de NO PAGADO

DISEÑO DEL FORMULARIO

CÓDIGO EVENTO AL ACTIVAR REGISTRO

Private Sub Form_Current()
     If Me.pagado = False Then
      Me.lblAviso.Visible = True
    Else
      Me.lblAviso.Visible = False
    End If
End Sub

FORMULARIO EN EJECUCIÓN

Se activa el aviso porque este registro tiene la casilla Pagado en False.

NUEVO CÓDIGO BOTÓN RECORRER

Private Sub btnRecorre_Click()
  Dim cant As Long
  Dim x As Long
  Me.opcAborta = False
  cant = DCount("*", "facturas")
  For x = 1 To cant
     DoCmd.GoToRecord , , acNext
     pausasec (2)
    If Me.opcAborta = True Then
     Exit For
    End If
  Next x
   DoCmd.Close acForm, Me.Name
End Sub

Al terminar o Abortar cierra el formulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas