VBA Access: Bloquear campos del registro en formulario continuo

En un formulario continuo tengo que asegurarme que solo se pueda modificar un registro que cumpla ciertos requisitos.
Por caso, cuando se completó la edición, se tilda la casilla chkCompleto y este debe ser indicio que los campos de ese registro deben bloquearse y si el Checkbox está desactivado, los campos de ese registro deben habilitarse. ¿Cómo se puede hacer eso? Del mismo modo, si desactivo el checkbox deben habilitarse los campos bloqueados. Pero sólo de ese registro.

1 respuesta

Respuesta
1

En el evento después de actualizar de la casilla pon

If chkcompleto = -1 Then
Alias.Locked = True
fechalocked = True
Else
Alias.Locked = False
fechalocked = False

End If

Y lo mismo en el evento Al activar registro del formulario

Desarrollé el siguiente código pero tiene un problema:

    DoCmd.SetWarnings False
    DoCmd.GoToRecord , , acFirst
    For X = 1 To Form.Recordset.RecordCount
        If Me.chkEDevol.Value = True Then
'            For Each CTRL In Me.Controls
                If CTRL.ControlType = acTextBox And Left(CTRL.Name, 4) = "txtE" Then
                    CTRL.Enabled = True
                End If
                If CTRL.ControlType = acComboBox And Left(CTRL.Name, 4) = "lstE" Then
                    CTRL.Enabled = True
                End If
            Next CTRL
        Else
            For Each CTRL In Me.Controls
                If CTRL.ControlType = acTextBox And Left(CTRL.Name, 4) = "txtE" Then
                    CTRL.Enabled = False
                End If
                If CTRL.ControlType = acComboBox And Left(CTRL.Name, 4) = "lstE" Then
                    CTRL.Enabled = False
                End If
            Next CTRL
        End If
        DoCmd.GoToRecord , , acNext
    Next

Sólo adopta el valor del primer registro para todos los registros. Ya no sé cómo armarlo para que responda solo por cada registro.

De entrada veo cosas que no entiendo:

1º Le dices que para x=1.... ¿Pero no veo que hayas definido la variable x

Hay que empezar por Dim x as integer, o long o lo que sea

2º Usas for each ctrl pero pasa lo mismo, no has definido la variable ctrl. La instrucción de VB es

for each control in me.controls

Entonces, si no la quieres poner así, la quieres poner como ctrl tendrás que poner antes

dim ctrl as control

3º No sé si es error al transcribir el código pero si miras la primera línea de

for each ... verás que a la izquierda de todo(al menos aquí se ve) hay un apostrofe. Eso hace que considere a esa línea como un comentario( se habrá puesto en verde), por tanto no la ejecuta.

4º Como tengo un máster internacional en Vaguería, ¿podrías mandarme una copia del formulario y de la tabla o consulta origen( no hacen falta datos)? Mi correo es [email protected]. Si lo haces, en el asunto del mensaje pon tu alias Sasha, ya que si no sé quien me escribe ni los abro

Muchas gracias por la respuesta:
1 y 2) Ambas variables son de proyecto y están establecidas como X as Long y CTRL As Access.Control
3) El apóstrofo seguro que lo copie en alguna combinación pero en el código funcional no está.
4) Con gusto lo haría pero es bastante compleja así que concentra datos de varias tablas. Lo que puedo hacer es pasar una base simulando lo que necesito obtener.

Eso lo haré pronto.

No hace falta que me mandes la(s) consultas. Pon el formulario y ya creo yo una tabla con todos los campos del formulario.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas