¿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

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.

2 respuestas más de otros expertos

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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas