Crear botón para habilitar campos y botones de un formulario pero con una clave

Ojalá me puedan ayudar, Si tengo un formulario (Registros) con campos y botones inhabilitados con la función me. Campo, quiero programar un botón que me habilite todo (cuadros de texto y botones) para poder hacer cambios en los registros, pero antes de hacerlo que me pida una clave, estaba pensando en un inputbox, pero este me muestra la clave, quiero que la muestre pero con asteriscos.

Tengo este código, pero ya me he perdido.

Hice un nuevo formulario (habilitarFRM), con un cuadro de texto (TxtContraseña), y 2 botones (aceptar y cancelar, respectivamente), a este formulario lo quiero llamar con otro botón (habilitar) situado en el formulario Registros (donde quiero que habilite todo)

Private Sub Aceptar_Click()
Dim Password 'Declaración de la variable
Password = TxtContraseña("Ingrese clave para realizar cambios")
If Password = 1234 Then
Me.AllowEdits = True
Me.cmdArchivo.Enabled = True
Me.EliminarArchivo.Enabled = True
Me.Guardar.Enabled = True
Me.Nuevo.Enabled = True
End If
End Sub

1 Respuesta

Respuesta
1

Te paso un código que creo que te servirá:

En este código, proteges cada tipo de control dentro del formulario (Textbox, listbox, etc)

Pégalo en el Evento 'Click' del Botón del Formulario en el que introducís la Password.

Dim Ctl As Control
If Me.PassW.Value = 1234 Then

' PassW es el nombre que le puse al textbox con contraseña

For Each Ctl In Forms!TuFormularioaEditar.Controls
If TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
Ctl.Locked = False
End If
Next
Else
For Each Ctl In Forms!TuFormularioaEditar.Controls
If TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
Ctl.Locked = True

End If
Next

msgbox "Contraseña Incorrecta"

End If

Luego en el Evento 'Al Cargar' (Form_Load), del formulario a editar escribís esta parte del código:

Dim Ctl As Control

For Each Ctl In me.Controls
If TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
Ctl.Locked = True
End If
Next

Así cuando abre el formulario ya se bloquean los textbox.

Espero que te sirva, y por supuesto podes volver a preguntar..!

Hola, gracias por contestar.

Creo que el código que me enviaste va bien, sólo 2 cositas:

1. al darle aceptar al formulario después de ingresar la clave (1234) no se cierra, me gustaría que se cerrara

2 también lo que quiero es que no bloquee todo, quiero dejar habilitados algunos controles (2 botones), tendría que ser uno por uno.

Desde ya muchas gracias

Te paso el mismo código con una modificación para que cierre el Formulario:

If Me.PassW.Value = 1234 Then
' PassW es el nombre que le puse al textbox con contraseña
For Each Ctl In Forms!TuFormularioaEditar.Controls
If TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
Ctl.Locked = False
End If
Next

docmd.Close acForm,"tuformulariodelPassword",acSaveYes
Else
For Each Ctl In Forms!TuFormularioaEditar.Controls
If TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
Ctl.Locked = True
End If
Next
msgbox "Contraseña Incorrecta"
End If

**********************************

Por otra parte si lo que quieres es Por ejemplo: bloquear un textbox, y otro textbox no, tenes que poner en el nombre de los textbox, o controles que quieres bloquear, las mismas iniciales, por ejemplo: BloqTxtnombre, BloqTxtApellido, (para los que quieres Bloquear). El resto de los controles que no quieres bloquear No deben llevar esas iniciales.

y con una modificación mas en el código quedaria asi

Dim Ctl as control

If Me.PassW.Value = 1234 Then
' PassW es el nombre que le puse al textbox con contraseña
For Each Ctl In Forms!TuFormularioaEditar.Controls
If Left(Ctl.Name, 4) = "Bloq" Then

Ctl.Locked = false
End If
Next
docmd.Close acForm,"tuformulariodelPassword",acSaveYes
Else
For Each Ctl In Forms!TuFormularioaEditar.Controls
If Left(Ctl.Name, 4) = "Bloq" Then

Ctl.Locked = True
End If
Next
msgbox "Contraseña Incorrecta"
End If

**************************

Luego para el evento Load del Formulario va esta parte:

Dim Ctl As Control
For Each Ctl In me.Controls

If Left(Ctl.Name, 4) = "Bloq" Then

Ctl.Locked = True
End If
Next

'Con este código al abrir el formulario y al presionar el boton de password, se bloquearan solo los controles que contengan las iniciales "Bloq".

Espero te sirva, y segui consultando que no hay drama!

Disculpa que te pregunte nuevamente, pero no me ha resultado, te podré datos más precisos para ver si me puedes ayudar a estructurar el código:

El Formulario principal donde capturo los datos se llama "Registros", aquí tengo los botones y cuadros de textos que quiero bloquear al abrir el formulario, y son: "cmdArchivo", "EliminarArchivo", "Guardar" y "Nuevo" y los campos "#Referencia", "Nombre", "Folio", etc. solo quiero dejar activos al abrir el formulario "Abrir", "Buscar" y "Habilitar" (botón que llama al formulario "HabilitarFrmRegistros"), aquí es donde ingreso la clave 1234 y me debe habilitar todos los bloqueados del Formulario "Registros".

También creo que sería bueno poner otro botón (bloquear) para dejar el formulario como si lo abriera, para no estar cerrando completamente el formulario y volver abrirlo.

Gracias

Ok Guerrero, vamos a hacerlo de una manera un poco diferente, (deshabilitaremos los controles) creo que va a servir.

(Te aclaro que hay una diferencia entre Bloquear y deshabilitar. Deshabilitar sirve para todos los controles, pero el bloquear solo para los textbox, listbox, pero no para botones por ejemplo)

En el "formulario Principal", en el Evento Load, pone este código:

Dim C as control

for each C in me.controls

C.Enabled=false 'Acá deshabilita todos los controles, pero no te preocupes.

next

'ahora habilitamos los controles que quieres que lo estén

me.Abrir.enabled=true

me.Buscar.enabled=true

me.Habilitar.enabled=true

me.deshabilitar.enabled=true

Hasta aquí haces que cuando se habrá el form principal, se bloqueen solo los controles que indicas.

luego en el botón Aceptar del form "HabilitarRegistros" pones este código:

Dim C as control

If Me.PassW.Value = 1234 Then
For Each C In Forms!FormularioPrincipal.Controls
C.Enabled = True
Next
docmd.Close acForm,"HabilitarRegistros",acSaveYes
Else
msgbox "Contraseña Incorrecta"
End If

Y para el botón que diga "Deshabilitar" en el formulario principal, escribes el siguiente código en su evento click.

Dim C as control
for each C in me.controls
C.Enabled=false

next
me.Abrir.enabled=true
me.Buscar.enabled=true
me.Habilitar.enabled=true

me.deshabilitar.enabled=true

'entonces ahora no tenes que cerrar y abrir el formulario para deshabilitar los controles.

Cuéntame como te fue con eso.

Tengo este código para el botón aceptar, pero me da error en todos los Me., creo que no está encontando el formulario "Registros" (los marco en negritas), te agradecería si me pudieras ayudar.

Private Sub Aceptar_Click()
Dim Ctl As Control
If Me.TxtContraseña.Value = 1234 Then
For Each Ctl In Forms!Registros.Controls
If TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
Ctl.Locked = False
Me.cmdArchivo.Enabled = True
Me.Nuevo.Enabled = True
Me.Guardar.Enabled = True
Me.EliminarArchivo.Enabled = True
Me.Entregado.Enabled = True
Next
DoCmd.Close acForm, "HabilitarFrmRegistros", acSaveYes
Else
MsgBox "Contraseña Incorrecta"
End If
End If
End Sub

Para Form_Load, puse el siguiente código y hace lo que quiero

Private Sub Form_Load()
Dim Ctl As Control
For Each Ctl In Me.Controls
If TypeOf Ctl Is TextBox Or TypeOf Ctl Is ComboBox Then
Ctl.Locked = True
Me.cmdArchivo.Enabled = False
Me.Nuevo.Enabled = False
Me.Guardar.Enabled = False
Me.EliminarArchivo.Enabled = False
Me.Entregado.Enabled = False
Me.Buscar.Enabled = True
Me.Abrir.Enabled = True
Me.Habilitar.Enabled = True
End If
Next
End Sub

Gracias

Los "me", que pusiste están de mas, ya que cuando uno escribe la palabra "me" se esta refiriendo al si mismo, en este caso como el botón aceptar lo tenes en el formulario Habilitarregistros, el "me" se refiere al mismo formulario habilitarregistros, y No al formulario Principal.

En todo caso deberían ser así: (en lugar de "me")

Forms!Registros.cmdArchivo.Enabled = True
Forms!Registros.Nuevo.Enabled = True
Forms!Registros.Guardar.Enabled = True
Forms!Registros.EliminarArchivo.Enabled = True
Forms!Registros.Entregado.Enabled = True

Pero esto no es necesario ya que si la contraseña es correcta ya te habilita los botones y textbox, en el formulario registros, y si la contraseña es incorrecta, los deja como al abrir el dicho Formulario Registros.


Me parece que se te mezclaron los códigos,

Te paso nuevamente el código del botón aceptar del formulario "HabilitarRegistros"

Private Sub Aceptar_Click()

Dim C as control
If Me.TxtContraseña.Value = 1234 Then ' (Fijate que aca si escribo "me", ya que es el boton del mismo formulario)
For Each C In Forms!Registros.Controls 'Aca ya me estoy refiriendo al formulario registros
C.Enabled = True 'Controles del formulario registros
Next
docmd.Close acForm,"HabilitarRegistros",acSaveYes
Else
msgbox "Contraseña Incorrecta"
End If

End Sub

Contame como te fue..!

entiendo tu código, pero no me reconoce el formulario "Registros" aplicando la variable, hay forma de tener acceso directamente al formulario, sin utilizar una variable?

Que raro que no reconozca el formulario, ¿me podrías describir el error que arroja el botón aceptar?

Lo único que se me ocurre ahora es que escribas el nombre del formulario entre corchetes:

[Forms]![Registros].controls (pruébalo así)

Si podes pasarme el error seria bueno...

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas