Informe de Access me da la opción de imprimir ni de guardar

Tengo un formulario que ejecuta un filtro para sacar informes según la selección que se decida.

El filtro lo hace correctamente y se abre la ventana modal y emergente porque he puesto el botó con el comando:

DoCmd. OpenReport nombrereport, acViewPreview,, Me. Filter
DoCmd. Maximize

El problema es que una vez abierto el informe, no me da la opción de imprimir ni de guardar el archivo, con el típico asistente de Microsoft. El botón derecho del mouse no hace nada y el izquierdo sólo hace zoom in y zoom out.

Para solucionar el problema este he creado un segundo botón "Guardar" que ejecuta un inputbox. En este caso sí que se guarda, pero el problema es que no me ejecuta el filtro porque no sé dónde lo puedo poner...

nombreArchivo = InputBox("Escriba el nombre del fichero PDF que desea guardar." & Chr(13) & "Por defecto el Informe se guardará en la ruta D:\ de cada ordenador", "PDF", nombreArchivo)
' Se ejecuta sentencia para abrir report
    On Error GoTo MyError
        DoCmd.OutputTo acOutputReport, nombrereport, "PDFFormat(*.pdf)", "D:\" & nombreArchivo & ".pdf", False, "", , acExportQualityPrint
MyExit:
   Exit Sub
MyError:
   If Err.Number = 2501 Then GoTo MyExit
   MsgBox Err.Description
   GoTo MyExit

Os comento, por si tiene relación, que en el Panel de Navegación tengo casi todos los ítems desactivados porque es una aplicación común a varios usuarios y quiero evitar sustos.

Necesitaría:

a) Saber la manera de poder imprimir o guardar desde la vista preliminar

b) Cómo hacer un DoCmd. OutputTo acOutputReport en que se aplique el filtro

2 respuestas

Respuesta
1

A la respuesta que te ofrece Jacinto (un saludo, ¡Cuanto tiempo sin verte por aquí!) Le veo un par de puntos flacos (ojo, también sin probarlo, hablo teóricamente):

1º/ Para que "Reports(NombreInforme).Filter=Me.Filter" y la siguiente linea funciones, el informe debería estar abierto.

2º/ Si al informe le tienes puestas las propiedades "Emergente" y "modal", todo lo que viene a continuación del DoCmd. OpenReport "NombreInforme" no se ejecutará hasta que lo cierres.

El problema, como yo lo veo, lo tienes precisamente en esas dos propiedades (y secundariamente en maximizarlo al abrir), pues al hacerlo modal y emergente, se coloca por encima de la ventana de access y no te deja interactuar ni con ésta ni con cualquier otro elemento que tengas en Access.

Si lo pones solo Modal, tendrás acceso al ribbon (si usas versiones desde la 2007) con todas sus opciones, o al menu si usas versiones anteriores.

Para guardarlo tienes que abrirlo en vista diseño, modificarle el filtro (por ejemplo con las lineas que señalo en el punto 1), cerrarlo guardando los cambios y volverlo a abrir (o usar el DoCmd. OutPutTo)

Saludos!


Una nueva web y foro de Access, pásate: http://nksvaccessolutions.com/ 

Hola, lo pongo modal SI y emergente NO, y puedo tener el ribbon, pero el problema es que tengo dos niveles de usuario por código, en que los usuarios que tiene marcado un campo Administrador pueden ver el ribbon, y si no lo tienen marcado no lo pueden ver (usuarios). Por tanto, los usuarios "básicos" tiene el mismo problema, tienen el informe en pantalla y no lo pueden guardar ni imprimir.

Te pongo el código del botón Guardar (donde he puesto el inputbox pero tengo el problema que se me aplica el filtro). He quitado todo el tema del cómo se monta el churro del filtro, que no viene al caso).

Private Sub cmdGuardar_Click()
    Dim todas la variables que necesito

    .....
    Dim miFiltro As String
    Dim nombrereport As Variant
    Dim nombreArchivo As String
    Dim resp As Integer
    Const miRuta As String = "D:\"
' valor defecto archivo
   ......
 'Aplicamos el filtro al formulario
    Me.Filter = miFiltro
    Me.FilterOn = True

.....
    nombrereport = ""
    If (Me.TxtDetalle.Value = True Or Me.TxtDetalle.Value = "-1") Then
            nombrereport = "InformeDetalle"
            nombreArchivo = "Informe Detallado por actuación formato "
        ElseIf (Me.TxtDia.Value = True) Then
            nombrereport = "InformeDia"
            nombreArchivo = "Informe Resumen por día formato "
        ElseIf (Me.TxtMes.Value = True) Then
            nombrereport = "InformeMes"
            nombreArchivo = "Informe Resumen mensual formato "
    End If
    If (Me.TxtPlantilla.Value = True) Then
       nombrereport = nombrereport & "plantilla"
       nombreArchivo = nombreArchivo & "plantilla"
    Else
        nombrereport = nombrereport & "excel"
        nombreArchivo = nombreArchivo & "excel"
    End If

' Definimos el nombre del archivo      
    nombreArchivo = InputBox("Escriba el nombre del fichero PDF que desea guardar." & Chr(13) & "Por defecto el Informe se guardará en la ruta D:\ de cada ordenador", "PDF", nombreArchivo)
      

    On Error GoTo MyError

' Aquí guardo el archivo pero no sé dónde meter el filtro, por lo que me guarda un informe sin aplicar el filtro

        DoCmd.OutputTo acOutputReport, nombrereport, "PDFFormat(*.pdf)", "D:\" & nombreArchivo & ".pdf", False, "", , acExportQualityPrint
        DoCmd.OpenReport nombrereport, acViewPreview, , Me.Filter

MyExit:
   Exit Sub
MyError:
   If Err.Number = 2501 Then GoTo MyExit
   MsgBox Err.Description
   GoTo MyExit
End Sub

Ideas:

1º/ Invierte el orden de estas dos lineas:

DoCmd.OutputTo acOutputReport, nombrereport, "PDFFormat(*.pdf)", "D:\" & nombreArchivo & ".pdf", False, "", , acExportQualityPrint
DoCmd. OpenReport nombrereport, acViewPreview,, Me. Filter

A ver si así consigues exportarlo con el filtro.

2º/ En el evento al cargar o al abrir del informe, haz que coja el filtro del formulario (que debe seguir abierto):

Me.Filter=Forms("nombreFormulario").Filter

Me.FilterOn=True

3º/ Puedes hacer un ribbon personalizado para los informes y activar/desactivar botones en función del usuario, o incluso crear dos ribbons distintos para el informe, y en función del usuario cargas uno u otro.

4º/ En vez de usar DoCmd. OutPutTo para exportar el informe, imprímelo usando una impresora virtual como pdfCreator

Ya casi lo tengo!!!

1) Si invierto  los comando sí que me aplica el filtro correctamente en el informe que creo, lo único que se abre en modo vista previa la consulta. Lo interesante sería que me hiciera el filtro, pero que si selecciono la opción guardar no se abra en vista previa. Hay alguna manera de que se "abra y se cierre" de manera que el usuario no vea la vista preliminar??

2) El filtro me llega correctamente cargado tal y como lo tengo montado

Me.filter=mifiltro, donde mifiltro es el churro que se va montando dependiendo de la selección.

3) Uf, ay sí que me pierdo. El tema del ribbon escondido lo pillé de un tutorial de internet y se me escapa de las manos lo que me comentas.

4) Lo pensé, el problema es que esta base de datos la consultarán varios usuarios, y "los jefes" por ejemplo no tendrán la impresora pdfcreator como impresora por defecto.

Yo creo que consiguiendo que me haga el filtro y no se abra el informe, ya me vale ;)

He probado:

       DoCmd.OpenReport nombrereport, acViewPreview, , Me.Filter
        DoCmd.OutputTo acOutputReport, nombrereport, "PDFFormat(*.pdf)", "D:\" & nombreArchivo & ".pdf", False, "", , acExportQualityPrint
        DoCmd.Close acReport, nombrereport, acSaveYes

        y funciona, lo único que el informe se abre un segundo, pero me vale si no hay una forma mejor...

DoCmd. OpenReport nombrereport, acViewPreview,, Me. Filter,acHidden

Así se te abrirá oculto y evitas ese "inconveniente"

Respuesta
1

Javi: Si tu botón se llamara BtnVistaPrevia, con algo así te debería de Funcionar.

Private Sub BtnVistaPrevia_Click()
On Error GoTo VistaPrevia_Click_TratamientoErrores
Dim NombreReport As String
NombreReport = "NombreDeTuInforme"
'Para que los Datos del Informe coincidan con los del Formulario
Reports(NombreReport).Filter = Me.Filter
Reports(NombreReport).FilterOn = True
DoCmd.OpenReport NombreReport, acPreview
If MsgBox("Deseas enviar a impresión?", vbYesNo) = vbYes Then
        DoCmd.OpenReport  NombreReport
End If
NombreArchivo = InputBox("Escriba el nombre del fichero PDF que desea guardar." & Chr(13) & "Por defecto el Informe se guardará en la ruta D:\ de cada ordenador", "PDF", NombreArchivo)
' Se ejecuta sentencia para abrir Report
        DoCmd.OutputTo acOutputReport, NombreReport, "PDFFormat(*.pdf)", "D:\" & nombreArchivo & ".pdf", False, "", , acExportQualityPrint                         
‘Repasa ésta línea de arriba, con la estructura de:
‘Expresión. OutputTo(ObjectType, ObjectName, OutputFormat, OutputFile, AutoStart, TemplateFile, Encoding, OutputQuality)
‘Puedes mirarlo en la ayuda del propio Access
VistaPrevia_Click_Salir:
On Error GoTo 0
Exit Sub
VistaPrevia_Click_TratamientoErrores:
MsgBox "Error " & Err.Number & " en Procedimiento.: VistaPrevia_Click de Documento VBA: Form_Xxxxxxxx (" & Err.Description & ")"
Resume VistaPrevia_Click_Salir
End Sub

Lo he ido escribiendo sobre la marcha y no lo he probado. Mira como te comento que la línea del DoCmd.OutputTo .....sea la adecuada. Mis saludos >> Jacinto

Javi: He leído la respuesta de Sveinbjorn (Gracias Diego por el apunte), y viendo mi código, creo que dará error en las líneas que él comenta.

Por tanto las líneas:

Reports(NombreReport).Filter = Me.Filter
Reports(NombreReport).FilterOn = True

Deben ir debajo de:

DoCmd. OpenReport NombreReport, acPreview

Mis saludos >> Jacinto

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas