"If IsNull(forms![nombre_formulario]![nombre_campo1]) Then" para evaluar todos los campos a la vez

No he encontrado nada en ningún sitio por eso busco ayuda.

Me piden evaluar de una manera sencilla si, en un formulario, se pueden remarcar de alguna manera los campos que están vacíos. Para los campos obligatorios ya controlo la obligatoriedad de respuesta, así que esto es para el resto, ya que son formularios muy largos, y quieren ver a simple vista si se han dejado algún campo, etc.

Así que se me ocurrió un botón en el formulario con lo siguiente:

Dim lngRojo As Long

lngRojo = RGB(255, 0, 0)
If IsNull(Forms![1_Datos_unidad_ejecutora]![Tipo]) Then
[Tipo].BorderColor = lngRojo
[Tipo].BorderWidth = 3
DoCmd.RunCommand acCmdRefreshPage
End If

Ahora bien, la base de datos está compuesta de muchos formularios, y cada uno con muchos registros, lo que me hace imposible escribirlos todo uno a uno.

Quisiera saber si hay alguna opción para evaluar si todos los campos de un formulario son nulos o no con una sola instrucción, y no uno a uno.

Algo como:

If IsNull(Forms![1_Datos_unidad_ejecutora]!["ALGUNO DE LOS CAMPOS DEL FORMULARIO"]) Then ...

Para evitar esto:

If IsNull(Forms![1_Datos_unidad_ejecutora]![Tipo]) Then...

If IsNull(Forms![1_Datos_unidad_ejecutora]![Provincia]) Then...

If IsNull(Forms![1_Datos_unidad_ejecutora]![Distrito]) Then...

...

1 respuesta

Respuesta
1

Te explico el proceso que debes seguir:

1º/ Bajate este archivo (una BD en access 2003):

http://www.filebig.net/files/y4HfMZ5C3c

2º/ Abre tu BD, e importa el módulo de la BD que te bajaste en el paso 1.

Este módulo tiene dos procedimientos:

SubControlaVacios(miForm as string), que mira si en el formulario hay algún campo vacío y lo colorea en rojo, y le aumenta el borde;

SubRestauraBordes(miForm as string), que restaura los bordes a negro (si tuvieras otro color, solo tienes que cambiarlo en el modulo)

3º Para llamar a estos procedimientos, haces esto:

En el botón que creaste para comprobar los campos vacíos, le generas este código:

Call subControlaVacios(Me.Name)

En el evento al activar registro del formulario, este otro:

Call subRestauraBordes(Me.Name)

Así, cuando pulses el botón, se te marcan los campos vacíos en rojo, y al cambiar de registro, o abrir el formulario, se ponen todos en negro.

Esto lo puedes hacer en todos los formularios de tu BD, poniendo los códigos del punto 3.

¿Era esto lo que buscabas? Ya me cuentas.

Muchas muchas muchas gracias por tu pronta respuesta!!

Si que es esto lo que busco, pero lo he probado y no me funciona.

Tal y como dices, he importado el modulo, he puesto el evento en el botón creado, y el siguiente evento al activar registro del formulario.

Pero al probar, dejo un campo vacío, apretó el botón, y me dice sale un cuadro de error con lo siguiente:

"Se ha producido el error '438' en tiempo de ejecución:

El objeto no admite esta propiedad o método"

Si apreto depurar me marca en amarillo la siguiente linea del modulo:

If IsNull(ctl) Or ctl.Value = "" Then ' Si está vacío

He de decirte que trabajo con Access 2007, que no lo había dicho! siento el fallo mio de no decírtelo, no se si esto afecta quizás al código!

De nuevo, muchas gracias por adelantado!

¿Puedes mandarme una copia de tu bd? No hace falta que tenga registros.

Súbela a filebig o sumilar, y ponme aquí ek enlace.

Seguro q es por no registrar alguna libreria...

Ostras, muchas gracias!!

Pues mira, la tienes aquí:

http://www.filebig.net/files/zBNrEy7vZa

Decirte que aun está a medias y que solo el form "1 Datos de la unidad ejecutora" está finalizado, y es el único que de momento tiene el botón que te comentaba para evaluar los nulos (abajo del todo). Así que puedes trabajar con él.

Y perdona todas las atrocidades que veas... que llevo trabajando con Access un año... y soy muy principiante!

De nuevo muchas muchas gracias! Buen fin de semana!!! Saludos

Me faltaba una linea en el código que te mandé, y era comprobar previamente el tipo de control a "colorear", por eso te daba el error.

Te resubo la BD, con el fallo corregido: http://filebig.net/files/iTzSmMh925

Un saludo, y buen fin de semana a ti también.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas