No se puede establecer la propiedad Origen del registro

Tengo un formulario en el que elijo dos fechas para filtrar el informe. Este informe lleva un subinforme.

Y el error me da en el código del subinforme:

Private Sub Report_Open(Cancel As Integer)
    Me.RecordSource = "Select * from CFacturasEmitidasSubinforme where " & Me.Parent.Filter
    Call AplicarDiseñoInformes(Me)
End Sub

Este es el código que abre el formulario:

Public Function ElFiltroFecha(ElForm As Form, ElCampo As String, ElInforme As String) As String
Dim MiArgumento As String
    If Not IsNull(ElForm.txtDesdeF) And Not IsNull(ElForm.txtHastaF) Then
        ElFiltroFecha = ElCampo & " BETWEEN #" & Format(Nz(ElForm.txtDesdeF, #1/1/1900#), "mm/dd/yyyy") & "# AND #" & _
                                   Format(Nz(ElForm.txtHastaF, #12/31/9999#), "mm/dd/yyyy") & "#"
        MiArgumento = "Del " & Format(ElForm.txtDesdeF, "medium date") & " hasta el " & _
                        Format(ElForm.txtHastaF, "medium date")
        DoCmd.OpenReport ElInforme, acViewPreview, , ElFiltroFecha, , MiArgumento
        DoCmd.Close acForm, ElForm.Name
    Else
        MsgBox "Es necesario introducir las dos fechas.", vbInformation, NombreBD
    End If
End Function

Y la consulta:

No veo dónde puede estar el error.

1 respuesta

Respuesta
1

El error está en que el evento Open se produce antes de cargar los datos en el informe, y por eso no puede coger el valor de Parent. Filter (porque aún no está creado el filtro)

Una solución sería crear el filtro a partir de los valores del formulario. Otra, no modificar el Recordsource del subinforme y aplicarle el filtro en otro evento (Report_Load, por ejemplo). Otra más: en vez de abrir desde el formulario el informe con subinforme normalmente y modificarle las propiedades, los abres en vista diseño y oculto, les cambias lo que tengas que cambiar (origen de datos, valores de etiquetas, ocultar o no controles...), cierras el informe guardando los cambios, y lo vuelves a abrir normalmente.

Tendrás que abrir en vista diseño por un lado el informe, y por otro el informe que hace de subinforme para modificarle a cada uno lo que sea.

He hecho lo más fácil. Así:

Private Sub Report_Load()
    Me.Filter = Me.Parent.Filter
    Me.FilterOn = True
End Sub

Muchas gracias. Un saludo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas