Grabar un informe en formato PDF al disco duro (ACCESS)

,

Tengo el siguiente problema, estoy usando una rutina que me paso un experto del foro, para poder grabar un informe en el disco duro (formato PDF), la rutina es:

Dim strRutaOC As String
Dim miTitulo As String
DoCmd.SetWarnings False
strRutaOC = "C:\Sys_RockTools\Data OC"
miTitulo = Nz(Me.nOCompra.Value, "") & "-" & Nz(Me.rsocial.Value, "")
DoCmd.CopyObject , miTitulo, acReport, "Purchase Order"
DoCmd.OutputTo acReport, miTitulo, acFormatPDF, strRutaOC & "\" & miTitulo & ".PDF"
titulo = "Orden de Compra grabada en su Disco Duro"
MsgBox "La Orden de Compra que esta en pantalla ha sido grabada en formato PDF, " _
& " si desea consultar este archivo puede acceder a la ruta C:\xxxxx\yyyyy.", vbExclamation, titulo
DoCmd.DeleteObject acReport, miTitulo
DoCmd.SetWarnings True

Mientras estoy en la aplicación se ejecuta perfectamente, pero si creo el archivo ejecutable ACCDE, y ejecuto la misma acción, me aparece este error, ¿cómo puedo solucionar este problema?

2 respuestas

Respuesta
2

Al salirme ésta pregunta sugerida, solo abundo en lo que te comenta Abraham.

Independientemente de la extensión .accdb o .accde, no veo el uso .CopyObject

Has de usar DoCmd. OpenReport... con los parámetros de visible, oculto etc. que necesites

https://msdn.microsoft.com/es-es/vba/access-vba/articles/docmd-openreport-method-access 

Un saludo a los dos, Abraham y Seru >> Jacinto

Gracias por tu respuesta, lo que sucede es que los archivos que se deben guardar tienen que tener el numero de la orden de compra + en nombre del cliente, por ello la rutina crea una copia y le cambia de nombre, sin este "artificio" el informe siempre tendría el mismo nombre,¿podrías ayudarme con eso? .En otras palabras "Como hago para grabar en disco duro un informe de Access y que el nombre pueda cambiarlo en función de NroOC y Nombre de Proveedor" cuando hice esa consulta me indicaron el código que adjunto ... Gracias por tu apoyo

Seru: Si después de intentarlo con lo que te he enviado y con la siguiente línea no acabas de sacarlo, te haría unas líneas de código. No obstante y para fijar conocimientos debes practicar aunque cometas errores.

DoCmd. OutputTo acOutputReport, NombreInforme, acFormatPDF, RutaYFicheroPDF, False,,, acExportQualityPrint 'Si se quiere visualizar el PDF >> Poner True

No tiene nada que ver el NombreInforme que usas y el Nombre del Fichero PDF que quieres guardar.

Ejemplo con la línea que te escribo>>

DoCmd. OutputTo acOutputReport, "Resumen", acFormatPDF, "C:\Documentos\Historia\LosAcontecimientosMasImportantesDel2017.pdf, False,,, acExportQualityPrint 'Si se quiere visualizar el PDF >> Poner True

Mis saludos >> Jacinto

Jacinto muchas gracias por tu pronta respuesta, probare tu código y te escribo, al margen de todo agradezco tu apoyo invalorable ... gracias !

Jacinto el código que indicas es PERFECTO, funciona en el archivo ejecutable y suprimí la copia del informe, una consulta adicional, esa misma idea necesito para enviar por correo un informe de access pero con un nombre también definido en Numero de Orden de Compra + Nombre del proveedor

¿Cómo cambio el nombre? La rutina que tenia antes para hacer eso (Incluye la instrucción para generar la copia) es:

*******************************

Dim miTitulo As String

miTitulo = Nz(Me.nOCompra.Value, "") & "-" & Nz(Me.rsocial.Value, "")

DoCmd.CopyObject , miTitulo, acReport, "Purchase Order"

DoCmd.SendObject acSendReport, miTitulo, "pdf", , "[email protected];[email protected]", , "PO Nº " & ": " & miTitulo, , True
DoCmd.DeleteObject acReport, miTitulo

******************************

Esto funciona bien si no estoy con una base ejecutable, he probado cambiar la instrucción para ver como puedo cambiar el nombre del informe y enviarlo pero no se donde colocar el código similar al que usaste para grabar el archivo en el disco duro el mismo que es:

DoCmd.OutputTo acReport, "Purchase Order", acFormatPDF, strRutaOC & "\" & miTitulo & ".PDF"

Donde : [Purchase Order] es el nombre del informe que deseo enviar

Espero no haberte confundido con mi explicación

Saludos

Y gracias nuevamente

Seru: Mira cuando puedas el CopyObject, porque en éstos usos no le veo sentido.

De otro lado, no conviene ir alargando los post con mucha literatura y con temas nuevos.

Por ésta vez te comento, así sin pensarlo de masiado, algo que creo te dará resultado, en su estructura. Los nombres ya los rellenas tu.

DoCmd. OpenReport "Purchase Order", acViewPreview,,,, acHidden

DoCmd. SendObject acSendReport, "Purchase Order", acFormatPDF, Destinatario, LaCopia, CopiaOculta, ElAsunto, CuerpoDelMensaje, 0

DoCmd. Close acReport, "Purchase Order"

Un saludo >> Jacinto

Respuesta
1

Estás intentando crear una copia de un "informe" y hasta donde recuerdo en los archivos *. Accde eso no se puede

Abraham Valencia

Lo que sucede es que inicialmente mi pregunta fue : Como grabar un informe de access en el disco duro "pero" con un nombre que sea el numero de la orden de compra + el nombre del proveedor

Al hacer esa consulta un experto envío el código que adjunto y allí el artificio era cambiarle de nombre a una copia de este informe, grabarlo y luego eliminar esta copia.

Al probar el código, este funciona perfectamente pero NO al hacerlo desde el ejecutable, entiendo que sea justo por ser un archivo ejecutable, pero "Hay alguna forma de hacer eso?" gracias por su apoyo...

No entiendo la conveniencia de copiar un objeto Informe, exportarlo a PDF y después eliminar esa copia cuando desde el Informe original fácilmente podrías exportarlo a PDF con el nombre que quisieras.

Y como ya te comenté, desde los archivos *. Accdb se puede, pero desde los archivos *. Accde no podrás pues dicho formato no permite copiar Informes. ¿Qué hacer? Pues quitar eso de copiar que, desde mi punto de vista y con la información que das, es innecesario.

Comentas

Abraham Valencia

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas