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