¿Desbloquear campos en formulario al hacer click?

Tengo el siguiente formulario basada en una sola tabla..

En el cual puedo buscar por PLACA, agregar nuevo registro y eliminar registro además de tener establecido manualmente desde el formulario los campos bloqueados, y le coloque una imagen que al momento de dar click a la imagen de editar ( con un código que le coloque para desbloquearlos) me haga la función y efectivamento lo hace... Pero me cambia el color de una parte del formulario anexo imagen del antes y después

ANTES

Después de dar click a la imagen de EDITAR

Agradezco la ayuda.. Le coloque este código a la imagen de que al momento al dar click

Private Sub Comando137_Click()
On Error Resume Next
For Each ctl In Me.Controls
If ctl.Name <> "Comando137" Then
ctl.Locked = False
End If
Next
End Sub

3 respuestas

Respuesta
2

Es fácil con una función pública que le sirva para todos los formularios. Observe este formulario

Si hago clic en el botón Bloquear quedan bloqueados los controles y el título del botón cambia el color del texto y el nombre por Desbloquear.

Utilizo una función a nivel de módulo para llamarla desde cualquier formulario.

Código del botón 

  If Me.btnBloquo.Caption = "&Bloquear" Then
     Me.btnBloquo.ForeColor = RGB(205, 105, 15)
     Call bloquear_campo(1)
     Me.btnBloquo.Caption = "&Desbloquear"
  Else
     Me.btnBloquo.Caption = "&Bloquear"
     Call bloquear_campo(2)
      Me.btnBloquo.ForeColor = vbNormal
  End If

Observe como llamo la función bloquear_campo le paso 1 para bloquear y 2 para desbloquear.

CODIGO DE LA FUNCIÓN

Public Function bloquear_campo(lnbloqueo As Byte) 
'Función para bloquear o desbloquear campos
'Elaborada por: EDUARDO PEREZ FERNANEZ
'Fecha: 11/12/2022
'La función se puede llamar desde cualquier formulario
 On Error Resume Next
Dim ctl As Control
    For Each ctl In Screen.ActiveForm.Controls
         With ctl
            If .ControlType = acTextBox Or .ControlType = acComboBox Then
              If lnbloqueo = 1 Then
               .Locked = True
              Else
                .Locked = False
              End If
            End If
        End With
    Next
End Function

Si quiere el ejemplo lo puede solicitar a [email protected] favor en el asunto anotar la pregunta.

Su error está en que no ha definido la variable ctl. Puede ampliar los controles a bloquear en la función modificando esta línea

If .ControlType = acTextBox Or .ControlType = acComboBox Then

Por ejemplo, si quiere adicionar un listbox, quedaría así

If .ControlType = acTextBox Or .ControlType = acComboBox Or .ControlType = acListBox Then
Respuesta
1

El control Rectángulo no deja de ser un control más de la colección de controles de un formulario. Tendrías que poner algo como

For each control in form.controls

If control.controltype=actextbox or control.control.type acCombobox then

....

end if

Next

Así sólo te bloquearía los controles TextBox o Combobox

Gracias de antemano, pero me arroja error en una instrucción

Agradezco... solo necesito que me desbloquee y no se me cambie el color de una parte del formulario

Agradezco que tengo mal en la instrucción

Isabel. Como tengo tu correo te mando un ejemplo vía Email.

Respuesta
1

El bucle (traducido) es algo como:

Por cada CONTROL en el conjunto de controles del formulario

Si el tipo de CONTROL es un combo box entonces

CTL.Bloqueado = verdadero

...

Si al objeto (la variable que se recorre en el bucle) se le llama CONTROL ...¿Quién es 'CTL'?

Access aun carece de la capacidad de abstraerse y considerar que la variable CONTROL se pueda contraer y convertirse en CTL.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas