Campos inhabilitados al abrir un formulario

Estoy haciendo una aplicación en access, donde debo programar un horario, es decir, tengo los días de la semana en forma de columnas y las horas disponibles en forma de fila. Cada semana es un registro con los campos rut_lun1 para la reserva de la primera hora del lunes, rut_lun2 para la segunda hora del lunes y así sucesivamente hasta la ultima hora del sábado, en donde en el textbox queda el rut de la persona que esta reservando en el horario correspondiente. Todo funciona de lujo ... El problema es que quiero que en el evento open form, los campos ocupados estén inhabilitados, o sea que estén enabled=false y locked=false, todo esto con una rutina que recorra los 60 textbox (campos) del formulario... Desde el textbox(i) hasta el textbox(n)
Agradecido desde ya...
GMA

1 Respuesta

Respuesta
1
Escribe
Dim ctl As Control
For Each ctl In Form.Controls
If IsNull([ctl]) Then
ctl.Enabled = False
End If
Next
Gracias, algo he podido hacer, pero me resultan 2 problemas:
1.- Al incluir esta rutina en el form open, al abrir el formulario quedan enable=false los text vacíos, cuando lo que necesito es que queden enable=false los llenos, de modo de que no se puedan cambiar las horas reservadas. Cambie la instrucción por:
For Each ctl In Form.Controls
If NOt IsNull([ctl]) Then
ctl.Enabled = False
pero me genera un error de que no admite ese metodo (ctl.enabled=false)
solucion:
lo que hice fue inicializar los text con enabled false, luego aplicar la rutina
If IsNull([ctl]) Then
ctl.Enabled = True 'cambio de planes
... de modo que me mostrara en disponibles los vacíos... todo bien hasta ahí.
2.- El problema que no puedo solucionar es que al avanzar al siguiente registro, me mantiene enabled=false los text del registro anterior, puesto que la rutina la estoy definiendo para el OPEN FORM... ¿cuál seria el procedimiento correcto a aplicarle al form de modo que al cambiar al siguiente registro inicie la rutina?
Desde ya agradecido
gma
Lo siento, había entendido que los que querías que estuvieran inhabilitados es los que estuvieran vacíos. Efectivamente lo has hecho muy bien. La solución para lo que me dices es que ese código lo pongas también en el evento Al activar registro del formulario.
Muchas pero muchas gracias
Al parecer ya lo he solucionado... tengo otra duda: en una tabla tengo los datos de las personas, cuya clave principal es el RUT que es el Nº de identificación personal, escogí la opción de indexado sin duplicados. El punto es que quiero que al ingresar un registro, si este ya fue ingresado (unique) me genere un msgbox "Persona ya ingresada"... en vez de que salga el error de access "los cambios solicitados no se realizaron en la tabla correctamente por que crearían valores duplicados en el indice... etc. etc" ¿cómo?
Agradecido...
GMA
Esto ya es otra pregunta.
En vista diseño del formulario, en las propiedades del cuadro de texto RUT, en el evento Antes de actualizar, crea un procedimiento de evento y escribe
If DCount("rut", "nombre de la tabla", "[rut]=[forms]![nombre del formulario]![rut]") >= 1 Then
MsgBox "Persona ya ingresada", vbOKOnly + vbCritical, "Aviso"
Cancel = True
End If

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas