En este post voy a explicar cómo guardar un informe elaborado en Access en formato pdf usando VBA.
Para empezar, el archivo lo guardaremos en una ruta específica que configuraremos en nuestro código. Sigue este enlace si quieres saber más sobre cómo crear una carpeta automáticamente en Windows desde un formulario Access.
El ejemplo que adjunto al final del post, es un poquito más complejo de lo que suelo traer. Sin embargo, voy a intentar explicarlo todo muy bien para que no tengáis ningún tipo de problema para entender su funcionamiento. Aún así, si tenéis alguna duda, no dudéis en plantearla en los comentarios.
En realidad, se trata de un programa que registra los servicios ofrecidos en una peluquería, quedando grabados en la tabla "Movimientos".
El formulario "Movimientos" nos muestra los servicios prestados a través del subfomulario "Sub_Movimientos" y nos permite elaborar un informe mensual de los mismos.
Por último, el informe "Facturacion mensual" nos muestra los servicios prestados durante el mes seleccionado y totaliza el importe.
Como apunte, señalar que este informe tiene como origen de datos la consulta "cnsMovimientos" que nos sirve para filtrar, según el mes seleccionado, los datos de la tabla "Movimientos".
Después de explicar el funcionamiento del programa, vemos el código que hay que implementar en el evento "Al hacer clic" del botón Facturar,
Private Sub Facturar_Click()
'Calculamos el número de mes en el que nos encontramos
If Form!Mes = "Enero" Then
Numeromes = 1
ElseIf Form!Mes = "Febrero" Then
Numeromes = 2
ElseIf Form!Mes = "Marzo" Then
Numeromes = 3
ElseIf Form!Mes = "Abril" Then
Numeromes = 4
ElseIf Form!Mes = "Mayo" Then
Numeromes = 5
ElseIf Form!Mes = "Junio" Then
Numeromes = 6
ElseIf Form!Mes = "Julio" Then
Numeromes = 7
ElseIf Form!Mes = "Agosto" Then
Numeromes = 8
ElseIf Form!Mes = "Septiembre" Then
Numeromes = 9
ElseIf Form!Mes = "Octubre" Then
Numeromes = 10
ElseIf Form!Mes = "Noviembre" Then
Numeromes = 11
ElseIf Form!Mes = "Diciembre" Then
Numeromes = 12
End If
DoCmd.OpenReport "Facturacion mensual", acViewPreview
Me.Requery
'Creamos la carpeta donde vamos a guardar el informe
Crear_directorio
'Guardamos el informe en pdf
Application.Echo False
On Error GoTo Error1
Nombre = "C:\Prueba\Facturacion_" & Format(Numeromes, "00") & "_" & Año & ".pdf"
DoCmd.OpenReport "Facturacion mensual", acViewPreview
DoCmd.OutputTo acOutputReport, "Facturacion mensual", "PDFFormat(*.pdf)", Nombre
Error1:
Application.Echo True
End Sub
En primer lugar, el código asigna a la variable Numeromes un valor entre 1 y 12 correspondiente al mes del año seleccionado. En realidad, no es más que una conversión de letras a números del mes. Este número se utiliza en "cnsMovimientos" para filtrar solo los datos del mes seleccionado.
En segundo lugar, llamamos a la función "Crear_directorio", que nos creará la carpeta donde guardaremos el archivo pdf. En nuestro caso, hemos elegido crear la carpeta Prueba en la raíz de la unidad C.
Por último, generamos el archivo pdf desde Access usando VBA con la siguiente sintaxis: Facturacion_mes_año.pdf
Aunque lo puedes encontrar en el enlace que dejé al principio del post, adjunto también el código de la función de creación de carpetas,
Function Crear_directorio()
Dim MiFso As Object
Dim Ruta As String
Ruta = "C:\Prueba"
Set MiFso = CreateObject("Scripting.FileSystemObject")
DoCmd.SetWarnings False
On Error GoTo nocrear
MiFso.CreateFolder Ruta
nocrear:
DoCmd.SetWarnings True
End Function
Siguiendo con el ejemplo, si seleccionamos el mes de Junio en el formulario y pulsamos el botón Facturar,
A continuación, se lanzará el informe de dicho mes. Además, al mismo tiempo, se guardará en la ruta especificada con el formato preestablecido.
Espero que con este ejemplo, hayas aprendido cómo guardar un informe de Access en pdf usando VBA. Ciertamente es una funcionalidad muy útil para aplicar en tus próximos proyectos.
Por último, quiero invitarte a compartir tus dudas en los comentarios o en el foro. Intentaré ayudarte en todo lo que pueda, y así aprenderemos todos.
Un saludo y hasta la próxima.
Si te ha servido y quieres donar
Descarga el archivo del ejemplo
12 Comentarios
Enviar un comentario
Últimas publicaciones
Buenos días, al intentar exportar a formato PDF me devuelve
Se ha producido el error '2282' en tiempo de ejecución.
Esto me ocurre en equipos que están utilizando el runtime de access
Alguna idea?
Muchas gracias
Hola Antonio,
Ni idea, me imagino que la versión runtime tendrá esa y otras limitaciones.
Siento no poder ayudarte.
Saludos.
El ejemplo esta diseñado para guardar una copia en una carpeta de nueva creación. He intentado adaptarlo a mi proyecto pero me pierdo y no lo consigo. Me gustaría saber que modificaciones habría que hacer en el código para guardar un informe en formato PDF, pero en una carpeta ya creada. GRACIAS
Hola José María,
Si quieres, abre un hilo en el foro, sube tu archivo y te echo una mano. Adaptar el código para lo que necesitas es inmediato. No deberías tener problema.
Saludos.
Excelente aporte! ¿Existe la posibilidad de agregarle al pdf generado con vba una firma digital con un certificado digital que mi empresa ya tiene?
Hola Hugo,
Claro que es posible. Puedes poner en el mismo informe la firma digital como oculta a la visualización, pero que a la hora de imprimir salga impresa.
Saludos.
Excelente tip, voy a adaptar y probar y luego comento como me fue.
Gracias Rafa. Para cualquier duda, estoy por aquí. Saludos.
Excelente, exactamente lo que necesitaba
Hola Rubén,
Me alegro. Para cualquier cosa, por aquí andamos.
Saludos.
Hola.
¿cómo se haría para que por ejemplo te pida solo el año y al pulsar el botón de FACTURAR AÑO te guarde un informe para cada mes del año, (12 archivos pdf)?
Gracias anticipadas.
Hola José,
Tendrías que modificar la última columna de la consulta cnsMovimientos y dejarla de la siguiente manera,
y borrar todo el código relativo a las mensualidades del botón "Facturar" así como de la carga del informe.
Si sigues teniendo dudas sobre cómo realizarlo, abre un hilo en el foro y lo vemos.
Saludos.