Dar formato a un informe a través de VBA

Tengo creado un informe al que accedo a través de un formulario donde elijo varias opciones en un desplegable (cuenta contable, cliente, año y período). El código, bastante largo (aunque lo he cortado para que me quepa este mensaje), es el siguiente:

Public Function VerInformeCuentaContableClienteAñoYPeriodo(FName As Form, MrcPeriodo As String, CuentaContable As String, Cliente As String, Año As String, Periodo As String)
    If Len(miFiltro) > 0 Then
        miFiltro = Right(miFiltro, Len(miFiltro) - 4)
    End If
    If miFiltro = "" Then
        DoCmd.OpenReport "IInformeDeIngresos", acViewPreview
    Else
        DoCmd.OpenReport "IInformeDeIngresos", acViewPreview, , miFiltro, , MiArgumento
    End If
                Reports("IInformeDeIngresos").EncabezadoMes.Visible = True
                Reports("IInformeDeIngresos").EncabezadoTrimestre.Visible = False
                Reports("IInformeDeIngresos").EncabezadoAño.Visible = True
                Reports("IInformeDeIngresos").PieMes.Visible = True
                Reports("IInformeDeIngresos").PieTrimestre.Visible = False
                Reports("IInformeDeIngresos").PieAño.Visible = True
                Reports("IInformeDeIngresos").MesAño.Visible = True
                Reports("IInformeDeIngresos").TrimestreAño.Visible = False
            Case 2
                Reports("IInformeDeIngresos").EncabezadoMes.Visible = False
                Reports("IInformeDeIngresos").EncabezadoTrimestre.Visible = True
                Reports("IInformeDeIngresos").EncabezadoAño.Visible = True
                Reports("IInformeDeIngresos").PieMes.Visible = False
                Reports("IInformeDeIngresos").PieTrimestre.Visible = True
                Reports("IInformeDeIngresos").PieAño.Visible = True
                Reports("IInformeDeIngresos").MesAño.Visible = False
                Reports("IInformeDeIngresos").TrimestreAño.Visible = True
        End Select
    End If
End Function

Mi problema es que si llamo a esta función desde el formulario, al cerrar el informe la base de datos se queda bloqueada y tengo que cerrarla a lo bestia, además de que tarda mucho en cargar el informe. Así que había pensado en añadir todo el código referente a ocultar/mostrar distintas secciones del informe al propio informe. Open.Args lo estoy usando para pasarle el caption del informe. ¿Cómo hago entonces para pasar los valores de cada una de las variables que utilizo en los condicionales (cuentacontable, cliente, año y período)?

1 Respuesta

Respuesta
1

Puedes usar Operarse para pasar todos los valores, solo has de usar un separador cualquiera para separar cada uno de los valores, y luego usar split() o cualquier otro método para separar esos valores.

Por ejemplo, en el openargs le pasas los valores, separados por "/":

DoCmd.OpenReport "TuInforme", acViewNormal,,,,Me.cuenta & "/" & Me.cliente  & "/" & Me.año  & "/" & Me.periodo

Luego en el código para usar los valores, puedes declarar 4 variables ( o usarlo directamente) :

Cliente = split (me.openargs,"/")(1)

Cuenta  = split (me.openargs,"/")(0)

Año  = split (me.openargs,"/")(2)

Periodo  = split (me.openargs,"/")(3)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas