Botón para borrar casilla verificación y campos de registros filtrados en un formulario continuo.

Tengo un formulario donde me muestra los inmuebles que están alquilados, el nombre de los inquilinos y varias casillas de verificación:

- PagadoInquilino (indica si el inquilino ha pagado la renta en el mes en curso)

- Pagadoapropietario (si una vez ya pagado el alquiler se le ha realizado la transferencia al propietario)

- Luz (agua, gas y otros) (donde se introduce a mano si hay alguna factura de luz o cualquier otro suministro pendiente de pago)

- Observaciones (donde se anotan las observaciones sobre los eventos del mes)

Durante el mes en curso se van tomando notas y en los primeros 5 días se rellenan las casillas correspondientes al pago, tanto del inquilino como al propietario. Al terminar el mes un botón crea un formulario pdf que se archiva en una carpeta del sistema para control interno.

Al empezar el siguiente mes necesito que los campos que durante el mes anterior se han ido rellenando, estén vacíos, para poder repetir el procedimiento.

Dicho de otro modo, necesito un botón que en el formulario continuo me vacíe los campos "pagadoinquilino", "pagadoapropietario", "luz", "agua", "gas" y "otros".

2 respuestas

Respuesta
1

Si no utiliza fecha tendría preguntar si actualiza el recordset, observe este ejemplo

Hago clic en en el botón Preparar y hago clic en Sí y obtengo:

Si vuelvo hacer clic en el botón Preparar obtengo:

Utilizo una bandera para de tipo Boolean y la defino a nivel del formulario, sirve para controlar que no se repita la actualización mientras este activo el formulario, salvo que se cierre y se vuelva a abrir:

VARIABLE A NIVEL DE FORMULARIO

Option Compare Database
Option Explicit
Dim flag As Boolean

CÓDIGO DEL BOTÓN PREPARAR

Private Sub btnPreparar_Click()
 Dim miRS As Recordset
 If flag = True Then
   MsgBox "Ya actualizo el formulario", vbInformation, "Cuidado..."
   Exit Sub
 End If
 If MsgBox("¿Está seguro que actualiza el recordset?", vbQuestion + vbYesNo + vbDefaultButton2, "Le informo..") = vbNo Then
   Exit Sub
 End If
 Set miRS = Me.RecordsetClone
 miRS.MoveFirst
 With miRS
   Do Until .EOF()
      .Edit
        !pagadoinquilino = False
        !pagadoapropietario = False
        !luz = False
        !agua = False
        !gas = False
        !otros = False
        .Update
     .MoveNext
   Loop
 End With
 Me.Refresh
 Set miRS = Nothing
 flag = True
End Sub

Esta es una idea, pueda que otro salgo con otra alternativa.

Gracias a ambos por las respuestas.

Eduardo, sobre tu propuesta, y disculpa mi falta de conocimiento, dónde debería coloca la declaración?:

Option Compare Database
Option Explicit
Dim flag As Boolean

supongo que al principio del formulario, pero me da un error en la línea .Edit 

He utilizado el código solo que he cambiado el nombre del botón por "Restablecer".

Añadir que la cosa es algo más complicada, ya que el formulario donde están los campos a "vaciar" es un subformulario (AlquilerControlRentasSub) que está en vista Hoja de datos...

No importa, en este caso cambia un poco el código porque se debe hacer referencia a un subformulario:

Abro el formulario

Al hace clic en el botón Limpiar se hace lo mismo que en el anterior ejemplo.

Option Compare Database
Option Explicit
Dim flag As Boolean

Este código va en General del formulario principal,  observe la imagen

CODIGO DEL BOTON LIMPIAR

Private Sub btnLimpiar_Click()
 Dim miRS As Recordset
 If flag = True Then
   MsgBox "Ya actualizo el formulario", vbInformation, "Cuidado..."
   Exit Sub
 End If
 If MsgBox("¿Está seguro que actualiza el recordset?", vbQuestion + vbYesNo + vbDefaultButton2, "Le informo..") = vbNo Then
   Exit Sub
 End If
 Set miRS = Me.frmServicios.Form.RecordsetClone
 miRS.MoveFirst
 With miRS
   Do Until .EOF()
      .Edit
        !pagadoinquilino = False
        !pagadoapropietario = False
        !luz = False
        !agua = False
        !gas = False
        !otros = False
        .Update
     .MoveNext
   Loop
 End With
 Me.Refresh
 Set miRS = Nothing
 flag = True
End Sub

Observe que solo cambie esta línea

Set miRS = Me.frmServicios.Form.RecordsetClone

Porque, ahora el formulario servicios es un subformulario dentro el formulario frmPrincipal.

Y para el error revise estas referencias:

Si quiere envíeme la base de datos a [email protected] y miro que puedo hacer, favor en el asunto anotar la consulta.

Disculpad por el retraso, ando un poco liado con trabajo.

He sustituido en el código el nombre de subformulario pero me sigue dando un error. Hay algo que no estoy haciendo bien...

Le falta una referencia revise que sean similares con la imagen que le suministré

Respuesta
1

No se ve ningún campo fecha que permita determinar en que mes se está, por lo que sería muy conveniente que pusieras una imagen del formulario para ver, entre otras cosas, donde quieres poner el botón.

Así, a bote pronto podrías hacerlo, por ejemplo, en el evento Al activar el registro, con un código tipo

If me.newrec then

pagadoinquilino=0

pagadoapropietario=0

...

end if

O sea, si es un registro nuevo que ponga a "cero" las casillas.

también se podría usar algo como

For Each Control In Form.Controls
If Control.ControlType = acCheckBox Then
Control.Value = 0
End If
Next

Eso te pone a 0 todas las casillas del formulario

Por eso sería muy importante saber como es.

Gracias Julián. 

Realmente la fecha del mes no es un dato importante ya que se limpia todos los meses y partimos de cero. En el formulario tengo un botón que me genera un pdf con el título que le indico para quedar posteriormente archivado.

Gracias!

No le hagas caso al formulario ya que uso uno que ya tengo. Dices que es un formulario continuo. Si tengo el formulario

Cuando pulso el botón de Borrar

El código del evento Al hacer clic del botón es

Private Sub Comando31_Click()
Dim i As Byte
For i = 1 To Me.Recordset.RecordCount
For Each Control In Form.Controls
If Control.ControlType = acCheckBox Then
Control.Value = 0
End If
Next
DoCmd.GoToRecord , , acNext
Next
End Sub

es decir, ponme a Cero todas las casillas de verificación del registro1, luego vete al siguiente y haz lo mismo, y así hasta el último registro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas