Guardar un informe de Access como archivo pdf usando VBA

Escrito por Administrador

13 de diciembre de 2021

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".

bloquear-access-fecha

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.

bloquear-access-fecha

Por último, el informe "Facturacion mensual" nos muestra los servicios prestados durante el mes seleccionado y totaliza el importe.

bloquear-access-fecha

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".

bloquear-access-fecha

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,

bloquear-access-fecha

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.

bloquear-access-fecha
bloquear-access-fecha

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

  1. Avatar

    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

    Responder
    • Avatar

      Hola Antonio,

      Ni idea, me imagino que la versión runtime tendrá esa y otras limitaciones.

      Siento no poder ayudarte.

      Saludos.

      Responder
  2. Avatar

    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

    Responder
    • Avatar

      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.

      Responder
  3. Avatar

    Excelente aporte! ¿Existe la posibilidad de agregarle al pdf generado con vba una firma digital con un certificado digital que mi empresa ya tiene?

    Responder
    • Avatar

      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.

      Responder
  4. Avatar

    Excelente tip, voy a adaptar y probar y luego comento como me fue.

    Responder
    • Avatar

      Gracias Rafa. Para cualquier duda, estoy por aquí. Saludos.

      Responder
  5. Avatar

    Excelente, exactamente lo que necesitaba

    Responder
    • Avatar

      Hola Rubén,

      Me alegro. Para cualquier cosa, por aquí andamos.

      Saludos.

      Responder
      • Avatar

        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.

        Responder
        • Avatar

          Hola José,

          Tendrías que modificar la última columna de la consulta cnsMovimientos y dejarla de la siguiente manera,

          Modificación consulta

          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.

          Responder

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Últimas publicaciones

Categorías

abril 2024
LMXJVSD
1234567
891011121314
15161718192021
22232425262728
2930 

Debates en el foro

Avatar
Formularios con ADO

Contacto