Botón para bloqueos de Formularios

Estoy trabajando en un aplicación Access y necesito un botón que al pulsarlo bloquee todo un formulario con todos los campos incluidos en el mismo y a la vez antes del bloqueo pase a varios campos fechas e importes calculados para su inactividad. Si es pulsado de nuevo pueda desbloquear el registro para una posible modificación posterior.

1 Respuesta

Respuesta
1

Para bloquear/desbloquear puedes jugar con la propiedad permitir ediciones (AllowEdits) del formulario.

Por ejemplo, en tu botón podrías poner:

If Me.AllowEdits=True Then    'Si está permitida la edición

Me.AllowEdits=False  'Impides la edición

Else  'En caso contrario 

Me.AllowEdits=True  'Permites la edición

End If

Los cálculos que dices los tendrás que poner en la primera parte del bloque If. Si además quieres impedir que se eliminen los registros, has de usar la propiedad AllowDeletions

Gracias por tu interés.

El problema que estoy teniendo es que solo me bloquea el Formulario y no el subformulario.

Y cuando bloqueo un registro me bloquea todos los registros no solo el que le he dado el bloqueo.

¿Tengo qué colocar el evento en "Al hacer Click"?

Ok, entonces lo que quieres hacer no es exactamente lo que indicabas en tu pregunta.

Prueba esto:

1º/ Añade a la tabla principal (la que usas como origen de tu formulario) un campo llamado Bloqueado, de tipo Sí/No

2º/ Añade ese campo a tu formulario y le cambias su propiedad Visible a No, para que permanezca oculto.

3º/ A tu botón, en el evento Al hacer click, le programas este código:

Private Sub .....

Me.Bloqueado=Not Me.Bloqueado

Call Form_Current

End Sub

4º/ En el evento Al activar registro de tu formulario, le programas este otro código:

Private Sub Form_Current()

If Me.Bloqueado=True Then

Me.AllowEdits=False

Me.NombreSubformulario.Form.AllowEdits=False

Else

Me.AllowEdits=True

Me.NombreSubformulario.Form.AllowEdits=True

End If

End Sub

Muchas gracias por tu gran ayuda.

He realizado todos tus instruccione y estoy teniendo un problema de compilación porque mi subformulario tiene un paréntesis inicial  en el nombre del mismo (Z) Lineas Venta Clientes  y no me lo admite y tendré que modificarlo ya que me da un error, me lo marca en rojo, y el mismo, lo utilizo en varios formularios y tendré que rehacer los nombres y accesos ya que son bastantes me llevara un poco de trabajo.

En el caso que he de recoger una fecha y hacer un calculo cuando bloqueo el registro como he de hacerlo y donde he de colocarlo?

Un saludo

El problema del nombre del subformulario lo solucionas poniéndolo entre corchetes:
Me.[NombreSubformulario].Form.AllowEdits=True

Así te evitas tener que rehacer la aplicación.

Ten en cuenta, para futuras ocasiones, que no es aconsejable usar nombres con espacios en blanco o signos "raros" pues a la hora de escribir código son más problemáticos.

Para hacer los cálculos, el código lo has de poner en el código del botón, al principio de todo, y además dentro de un If... Then, para que sólo se ejecute si el registro está desbloqueado. Algo así:

Private Sub .....

If Me.Bloqueado<>True Then

'Aquí lo que quieras hacer

End If

Me.Bloqueado=Not Me.Bloqueado

Call Form_Current

End Sub

Hola de Nuevo.

Me da este error '2465' en tiempo de ejecución y me marca estos errores al Depurar

(1) En el Botón BLOQUEADO

Private Sub Bloqueado_Click()
Me.Bloqueado = Not Me.Bloqueado
Call form _Current      (Esto me lo Marca en Rojo)
End Sub

(2) Y en el Formulario en el evento Al activar REGISTRO del formulario

Private Sub Form_Current()
If Me.Bloqueado = True Then
Me.AllowEdits = False
Me.[(Z) LINEAS CLIENTES MOSTRADOR].Form.AllowEdits = False
Else
Me.AllowEdits = True
Me.[(Z) LINEAS CLIENTES MOSTRADOR].Form.AllowEdits = True       (Esto lo Marca en Amarillo)
End If
End Sub

Donde estará el botón para poder Activar o Desactivar el registro, ¿si el Botón lo coilocamos en Modo Invisible?.

Muchas gracias poor tu ayuda

Para el primer error, pon simplemente Form_Current o Call Form_Current()

Y para el segundo, ¿qué error te da? No le veo nada raro, salvo el nombre del subformulario, que al no seguir una sintaxis "estándar" tienes estos problemas.

Hola de nuevo .. Bueno los errores que tenia he estado comprobando los textos y se producían porque no había escrito bien los espacios en ambos procesos.

Pero el bóton de Bloqueado no me aparece nunca ni en Registros nuevos o en lo que ya están anteriormente colocados.

Que he de hacer para que este botón sea visible siempre y decidir cuando lo desee bloquear/desbloquear el registro?

He probado en hacerlo visible pero no me deja marcarlo y siempre esta como desbloqueado el formulario.

Un saludo

Creo que te estás liando un poco de más:

El botón (lo puedes llamar como quieras) ha de estar siempre visible y lo has de poner donde más te guste en el formulario.

Lo que tiene que ir oculto es el checkbox asociado al nuevo campo Bloqueado que te comento en el punto 1 (y esto no es un botón)

Te dejo un mini ejemplo para que lo veas.

En el punto 3º que te decía antes, añade esta línea que te marco en negrita:

Private Sub NombreBoton_Click()
Me.Bloqueado = Not Me.Bloqueado
Me.Refresh
Call Form_Current
End Sub

Muchas gracias por tu paciencia..

Efectivamente me había liado y había confundido el botón de acción del bloqueo con el campo de con el checkbox asociado.

He puesto cada cosa como corresposde y efectivamente funciona perfectamente.

El único problema que sigo teniendo es que el subformulario no queda bloqueado con el formulario principal y en el se puede seguir modificando.

He repasado todo y creo que esta todo bien escrito. ¿Qué crees que pueda ser que no queden ambos bloqueados/desbloqueados a la vez?.

Un saludo

Prueba esta otra alternativa, para bloquear el subformulario:

Me.[(Z) LINEAS CLIENTES MOSTRADOR].Locked = True/False

Le pondrás True cuando lo quieras bloquear (cuando AllowEdits=False) y viceversa.

Te actualizo el ejemplo.

No me aclaro en lo que me quieres decir, esto es lo que tengo puesto

Private Sub Form_Current()
If Me.Bloqueado = True Then
Me.AllowEdits = False
Me.[(Z) LINEAS CLIENTES MOSTRADOR].Form.AllowEdits = False
FechaRetiradoMostra = Date
EntregaCuentaMostra = [Texto93]
Else
Me.AllowEdits = True
Me.[(Z) LINEAS CLIENTES MOSTRADOR].Form.AllowEdits = True
End If
End Sub

Te Agradecería si me lo pudieses rectificar

Muchas gracias

Private Sub Form_Current()
If Me.Bloqueado = True Then
Me.AllowEdits = False
Me.[(Z) LINEAS CLIENTES MOSTRADOR].Locked= True
FechaRetiradoMostra = Date
EntregaCuentaMostra = [Texto93]
Else
Me.AllowEdits = True
Me.[(Z) LINEAS CLIENTES MOSTRADOR].Locked = False
End If
End Sub

Así te quedaría usando Locked en el subformulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas