¿Cómo verificar dentro de un subformulario si un registro esta vacío y si esta vacío cambiar el color de dicho registro ...?

Tengo un Formulario con un SubFormulario, el cual estoy usando para llenar dos tablas relacionadas, dicha tablas deben de tener la mayoría de sus registros llenas, para lo cual usando programación de vba en el formulario he podido llegar hasta en un 80 % de mi cometido (se le programo a cada registro, si esta vacío, y al dar click al botón guardar que cambie el color de fondo amarillo junto con una etiqueta que se hace visible dando advertencia que el campo es Obligatorio y usando setfocus para ubicar el cursor en dicho campo, todo dentro de unos bucles anidados) mi limitación esta en que no he podido llegar al SubFormulario donde tengo un cuadro combinado junto con un cuadro de texto, el cuadro combinado me ayuda a registrar datos dentro del cuadro de texto, ya que el cuadro de texto tiene que registrar un código de identificación de una persona y como el usuario seguramente no va a saberse todos lo cdigos de las personas dentro de la base de datos, se usa un cuadro combinado con los nombres de las personas y al seleccionar en el cuadro combinado el nombre, el mismo cuadro combinado registra su respectivo código en el cuadro de texto, por lo que es necesario que el mismo no quede vacío debe tener al menos un registro y la cantidad de registros es ilimitada, cosa que con esto no tengo problemas, el detalle que tengo, es advertir que ese registro no debe quedar vacío, me gustaría usar los mismos bucles If junto con las funciones de cambio de fondo de color y activación de etiquetas que se están usando en el Formulario, si fuese posible, para simplificar la programación.

Intentare Subir una Foto en Modo Diseño del Formulario para ver si funciona.

<blockquote class="imgur-embed-pub" lang="en" data-id="a/E9DK0"><a href="//imgur.com/E9DK0"></a></blockquote><script async src="//s.imgur.com/min/embed.js" charset="utf-8"></script>

2 Respuestas

Respuesta
2

Me he perdido un poco, porque dices que un registro esté vacío. Si está vacío del todo, ese registro no existe. Si es que algún campo haya quedado vacío, vamos a suponer que el subformulario tiene los campos NombreCompañía, NombreContacto, Ciudad, País. En vista diseño selecciona todos los cuadros de texto y en Formato-formato condicional elige nueva regla. Selecciona la expresión es: y a la derecha pon

Y te quedaría como

Si sólo quieres que se ponga en amarillo un cuadro de texto, selecciona ese cuadro nada más.

Y lo puedes combinar con mensajes, etc.

La foto tuya no ha salido.

Gracias por responder Julián González Cabarcos,

Lo que quiero, en si, es que el Formulario No Guarde si el subformulario esta completamente vacío. En su lugar me resalte el cuadro de texto fondo amarillo y me active una etiqueta que diga campo obligatorio debe registrar por lo menos . Comparado a tu ejemplo en la imagen seria cuando no tuviera ningún registro en los dos cuadro de texto "NombreCompañia" "NombreContacto", es decir no registro ninguna información en los cuadros de texto, es lo que pretendo evitar. En la imagen que me envías los cuadros de texto tiene ya varios registros unos llenos y si no están los dos cuadro de texto llenos se activa la condicional de fondo en amarillo y obvio si no están llenos ninguno de los dos cuadros de textos no aparecerá nada, como tu bien dices.

En mi caso es solo un cuadro de texto, apoyado con un cuadro combinado. El cuadro de texto registra el Código de una persona y si hay varias personas registraría una lista de como me muestras en la imagen tuya, el cuadro combinado sirve para buscar por nombre a la persona que se le desea registrar el código en el cuadro de texto.

Soy nuevo en esto, así que discúlpenme e intentado subir la imagen con la recomendación de este enlace:

https://blog.todoexpertos.com/post/2012/06/27/como-insertar-imagenes-en-mis-preguntas-o-respuestas haciendo uso de la alternativa mas simple fragmento del contenido del texto:"... así que os traemos una alternativa mucho más simple: imgur.com. La interfaz de esta aplicación online es muy sencilla y su funcionamiento muy rápido. Al entrar, basta con hacer click en el botón "Computer" (o arrastrar la imagen), localizar la foto que queráis subir en vuestro ordenador y hacer click en "Start Upload".

Pasados unos segundos veremos nuestra imagen y, en la columna de la derecha, distintos enlaces para publicarla o compartirla. El que a nosotros nos interesa es "Direct download". Ahora sólo tenemos que hacer click en el icono que aparece a la izquierda del enlace para copiarlo y pegarlo en el editor de Todoexpertos tal y como os hemos enseñado al principio. Así de fácil. " Pero la opcion Direct dowload" no aperece, creo que actualizaron la pagina y ya no sale y hay una serie de opciones que no se entiende muy bien por lo que escoji la opcion copiar enlace y lo pegue en el foro pensando que se iva a cargar la imagen, como en tu caso pero no me funciono, en este momento provando creo que si el enlace que envia se pega directamente en el navegador aparece, al menos asi parece. Disculpenme mi ignorancia. Agradecidos por el apoyo. Envio este enlace para ver, como segundo intento...

https://imgur.com/a/8KCAa  

Saludos!

Vamos a suponer que en el formulario( no te fijes en los nombres) tienes un botón de comando para guardar y otro para cerrar(anula el botón del propio formulario) y que el subformulario se llama Factura.

En sus propiedades eventos puedes poner

If Me!Factura.Form.Recordset.RecordCount = 0 Then
MsgBox "Lo siento pero el subform está vacío", vbOKOnly, "No te aviso más"
DoCmd.CancelEvent
End If

Cuando pulses el botón Guardar, si no hay registros en el formulario te saldrá como

Al pulsar Aceptar el cursor se vuelve al formulario a la espera de lo que quieras hacer.

En el caso del botón Cerrar puedes poner

If Nz(DCount("Producto", "factura", "idcliente=" & Me.IdCliente & "")) = 0 Then
MsgBox "Ya te he dicho que el subform está vacío, eres un pesado", vbOKOnly, "No me cierro, no"
Exit Sub
Else
DoCmd.Close
End If

Así, si pulsas el botón Cerrar y no hay registros

Muchas Gracias  Icue González,

 me esta funcionando con ese lazo, una ultima pregunta? en lugar de del IF se podria usar con una lazo IF NOT IsNull estoy intentando y no me funciona. Te consulto eso porque el bucle qpara validar si los campos en los cuadros de texto son nullos en el formulario lo tengo con IF NOT  isNull y dentro de el un if, mi idea es tener todo dentro de un mismo bucle para simplicar el programa, creo. Aunque no conozco mucho como trabaja este IF No IsNull y si admite ese tipo consultas para subformularios.

Te copio el bucle de como lo tengo y com lo probe usando el subformulario pero no me funciona solamente ne el que me enviaste.

Agradecido por todo y por tan pronta repuesta.

If Not IsNull(Fecha) And Not IsNull(Cod_Esacion) And Not IsNull(Cod_Operadora) And Not IsNull(Hrs_Traslado_) And Not IsNull(Hrs_Hombre) And Not IsNull(Texto36) And Not IsNull(Me!Detalle_Personal_Subformulario2.Form.Recordset.RecordCount ) Then
DoCmd.RunCommand acCmdSaveRecord
Call HabilitarBotones
MsgBox "El Reporte ha sido Guardado Exitosamente !!!", , "Reporte Guardado"

Else
If IsNull(Fecha) Then
Fecha.BackColor = vbYellow
Etiq_Fecha.Visible = True
Fecha.SetFocus
ElseIf IsNull(Cod_Esacion) Then
Cuadro_combinado31.BackColor = vbYellow
Etiq_Estacion.Visible = True
Cuadro_combinado31.SetFocus
ElseIf IsNull(Cod_Operadora) Then
Cuadro_combinado33.BackColor = vbYellow
Etiq_Operadora.Visible = True
Cuadro_combinado33.SetFocus
ElseIf IsNull(Hrs_Traslado_) Then
Hrs_Traslado_.BackColor = vbYellow
Etiq_HorasT.Visible = True
Hrs_Traslado_.SetFocus
ElseIf IsNull(Hrs_Hombre) Then
Hrs_Hombre.BackColor = vbYellow
Etiq_HorasActividad.Visible = True
Hrs_Hombre.SetFocus
ElseIf IsNull(Texto36) Then
Texto36.BackColor = vbYellow
Etiq_DetalleActividad.Visible = True
Texto36.SetFocus
ElseIf IsNull(Me!Detalle_Personal_Subformulario2.Form.Recordset.RecordCount) Then
MsgBox "Lo siento pero el subform está vacío", vbOKOnly, "No te aviso más"
End If

End If

End Sub

Saludos!!!!

Lo siento, pero con tanto nombre me lío. Podrías poner en el botón

For Each Control In Me.Factura.Form
If Control.ControlType = acTextBox And IsNull([Control]) Then

control.backcolor=255
MsgBox "¿ Cuantas veces tengo que decirte que no hay registros?"
DoCmd.CancelEvent
Else
DoCmd.RunCommand acCmdSaveRecord
End If
Next

Me explico, ciando pulses el botón, miraría en el subformulario, si hay algún cuadro de texto nulo. Si lo hay te lo pone en rojo y te sale el mensaje, si por el contrario están TODOS rellenos, te lo guarda.

Si fueran varios los colores los colores, yo usaría el formato condicional. En vista diseño del subformulario selecciona todos los cuadros de texto y pulsa Formato-Formato Condicional y ahí le pones la regla que quieras.

Respuesta
1

http://www.mvp-access.es/emilio/como/sintaxisparasubformularios.pdf 

Para la sintaxis de formulario/subformulario

Además puedes en la tabla hacer obligatorio el ingreso del campo; en propiedades del campo obligatorio = si (ojo en vista diseño de la tabla)

Gracias!

pezuarco999, excelente información !

Gracias por el aporte. Saludos.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas