Ocultar un subformulario si no tiene datos

FormularioA) que tiene un subformulario (sfContacto) cuyo campo clave es (IdCO) desearía que cuando no existan datos en el subformulario asociado a un registro, no sea visible.

He vuelto el subformulario NO visible y estoy utilizando el siguiente código, pienso que siempre que IdCo es igual a 0 no hay datos y si es distinto hay datos, y tampoco se muy bien en que evento colocar dicho código, si es el correcto

Gracias

Anjel

If IdCo <> 0 Then

Me.sfContacto.Form.Visible = False
Else
Me.sfContacto.Form.Visible = True
End If

2 Respuestas

Respuesta
1

En el evento Al activar registro del formulario principal puede clonar el subformularrio, algo como:

Private Sub Form_Current()
  Dim rs As Recordset
  Set rs = Me.Pedidos_articulos.Form.RecordsetClone
  If rs.RecordCount = 0 Then
     Me.Pedidos_articulos.Form.Visible = False
  Else
    Me.Pedidos_articulos.Form.Visible = True
  End If
End Sub

Reemplace Pedidos_articulos por el nombre de su subformulario.

Hola Eduardo

He de confesar que aunque la propuesta de Julián me ha funcionado, y no he entendido el proceso de clonar el subformulario (por eso recurro a vuestra ayuda). Por respeto y agradecimiento al tiempo que me has dedicado, he probado tu propuesta, y me funciona  ¡Gracias! 

Anjel

Hola Eduardo

He de confesar que la propuesta de Julián me ha funcionado, aunque no he entendido el proceso de clonar el subformulario, como agradecimiento al tiempo que me has dedicado he probado tu propuesta, y también me funciona ¡Gracias! 

Anjel

Respuesta
2

Puedes hacerlo de muchas formas. Por ejemplo, vamos a suponer que el campo que relaciona formulario con subformulario se llama IdCompra y las tablas Compras y DetalleCompra( y por comodidad los formularios se llaman igual). En el evento Al activar el registro del formulario puedes poner

If nz(dcount("*","detallecompra","idcompra=" & me.idcompra & ""))=0 then

me.detallecompra.visible=false

else

me.detallecompra.visible=True

end if

De esta forma, cuando vayas a un registro comprueba si en la tabla detallecompra( y por tanto en el subformulario) hay registros. Si los hay muestra el subformulario, si no los hay, no los muestra.

Quizá convendría una imagen del formulario con el subformulario.

Hola Julián

Tu propuesta me ha funcionado perfectamente, eres un fenómeno. ¡Gracias! 

Anjel

Hola Julián

No sé si debería abrir otra pregunta nueva, el tema es que quisiera hacer lo mismo que con el subformularios con un cuadro de lista, hacerlo visible si hay datos. He intentado utilizar tu código, pero cuando intento introducir un nuevo registro en la tabla principal no hay IdCompra y me da un error 

¿Puedes poner una imagen para saber donde está el cuadro de lista.?

No se como poner una imagen, indícame por favor como lo hago, gracias 

Hola Julián

No se si hay otra manera, yo he hecho una foto

Tengo dos tablas relacionadas, tabla principal tabFicha y secundaria tabObra, relacionas por campo IdFi. Como ves en la imágen en el formulario forFicha hay un cuadro de lista Obras que lista las obras que pertenecen al registro, si selecciono una obra en concreto me abre el formulario Obra correspondiente. Me gustaría que el cuadro de lista obra no fuera visible si el registro no tiene ninguna obra. 

He utilizado el código que me indicaste para el suformulario; funciona cuando abres una ficha que ya tiene datos, pero intentas abrir una ficha nueva, como no hay IdFi, da un error.

Cuando quiero "colgar" una imagen, donde esté pulso Impr Pant. O Print Screen( depende del ordenador). Luego abro algún programa editor de imágenes, yo uso Paint 3D que viene con Microsoft. La recorto, le hago lo que tenga que hacer y la guardo. Luego cuando voy a responder pulso el icono

Se abre un explorador para localizar dicha imagen y ya está.

Vamos a hacer una cosa. Haz una copia de tus dos tablas (con datos inventados) y del formulario y subformulario y me lo mandas a [email protected]

Si lo haces, en el asunto del mensaje pon tu alias Anjel, ya que si no sé quien me escribe ni los abro.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas