Exportar hoja de Excel en formato PDF con macros

Seguro en más de una ocasión se ha presentado la necesidad de guardar la Hoja de Excel en formato PDF, pues es precisamente lo que vamos a realizar en el siguiente ejercicio.

Macro para exportar datos de una hoja de Excel a Pdf.

Método ExportAsFixedFormat: Con la aplicación de este es posible exportar la Hoja de Excel a un archivo en formato PDF o XPS.

Para el siguiente ejemplo, vamos a trabajar con la misma tabla sencilla de la entrega anterior:

El objetivo es guardar esta hoja en un archivo PDF y lo primero es ingresar al editor de Visual Basic, puede ser con la combinación de teclas Alt + F11 y desde el explorador de proyectos, es necesario dar doble clic sobre la hoja donde se requiere crear la macro que para nuestro ejercicio se ubicará en la Hoja1:

Excel a PDF.

Aquí el código para exportar datos en Excel en formato Pdf.

Sub ExportarPDF()

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _

Filename:=ThisWorkbook.Path & "\Gerencie.pdf", Quality:=xlQualityStandard, _

IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=True

End Sub

Queda de la siguiente manera en el editor VBA:

Veamos lo que significan cada una de las líneas:

  1. La primera línea Sub ExportarPDF(), indica el inicio de la macro.
  2. Las siguientes líneas excepto la última en realidad es una sola línea de código dividida en 3 partes para que pudiera ser visible en la imagen (obsérvese que al final de cada línea se encuentra un guion bajo con el cual se puede separar una línea de código en varias partes y que sea demasiado larga para nuestro gusto). Lo que se hace es utilizar del Objeto ActiveSheet el Método ExportAsFixedFormat e indicando el tipo que sea PDF con el parámetro Type:=xlTypePDF. Luego se especifica la ruta para guardar y el nombre que en este ejemplo será “Gerencie.pdf” y finalmente se asigna el valor Falso a las características de Propiedades y área de impresión; la última propiedad OpenAfterPublish se encuentra en True, lo que significa que una vez se genere el PDF, lo abra
  3. La última línea marca el fin (End) de la Macro o Subrutina (Sub).

Para ejecutar la macro, lo ideal es insertar una autoforma en la Hoja1 y luego asignar la macro que acabamos de crear (clic derecho sobre la Autoforma y seleccionar la opción Asignar macro:

Finalmente seleccionar la macro que se acaba de crear:

Y al dar clic sobre el la autoforma, la macro genera el archivo PDF en la ruta donde tenemos el archivo Excel:

Así como también deja abierto el mismo archivo para ser revisado:

Descargar archivo de trabajo.

Guía Laboral 2024
Conozca sus derechos y obligaciones laborales como trabajador o como empleador, y evítese problemas. Ver más.

Forma de citar este artículo (APA):

Invitado. (2015, septiembre 6). Exportar hoja de Excel en formato PDF con macros [Entrada de blog]. Recuperado de https://www.gerencie.com/exportar-hoja-de-excel-en-formato-pdf-con-macros.html

Recomendados.

Deje su opinión o su pregunta. Trataremos de darle respuesta.
Su comentario o pregunta será editada automáticaente por el sistema.

Regístrese para informarle cuando se responda su pregunta.

6 comentarios
  1. Jorge Cordova mayo 30 de 2023

    Buen día. ¿Cómo puedo guardar en PDF de forma horizontal?

    Responder a Jorge Cordova
    • Gbot
      Gbot en respuesta a Jorge Cordova agosto 17 de 2024

      Para guardar un archivo PDF en formato horizontal, debe configurar la orientación de página antes de crear el PDF. Si ya tiene creado el PDF y quiere cambiar su orientación a horizontal, puede hacerlo desde Adobe Reader siguiendo estos pasos:

      1. Abra el documento PDF que desea rotar.
      2. Vaya al menú “Ver”.
      3. Sitúe el cursor sobre “Rotar vista” para desplegar las opciones disponibles.
      4. Select either “Rotar vista hacia la derecha” or “Rotar vista hacia la izquierda”, depending on your needs.

      Para guardar un archivo en formato horizontal desde Word o Excel, por ejemplo, siga estos pasos: En Word: 1. Haga clic en «Diseño» o «Layout» (dependiendo del idioma de su versión). 2. Seleccione «Orientación». 3. Elija «Horizontal». Luego guarde como pdf normalmente.

      Responder a Gbot
    • Gbot
      Gbot en respuesta a Jorge Cordova agosto 17 de 2024

      Para guardar un archivo PDF en horizontal, debe configurar la orientación de página antes de guardarlo. Los pasos a seguir dependen del programa que esté utilizando para crear o editar el PDF. Aquí hay algunos ejemplos: 1. **Microsoft Word**: – Antes de exportar como PDF, cambie la orientación de la página a horizontal desde “Diseño” > “Orientación”. Luego guarde el documento como PDF. 2. **Adobe Acrobat**: – Vaya a “Archivo” > “Imprimir”, seleccione una impresora virtual y ajuste las opciones para rotar o escalar según sea necesario antes de imprimirlo en formato PDF. 3. **Google Docs**: – Cambie la orientación del documento a horizontal desde “Archivo” > “Configuración de Página”. Luego descargue como PDF directamente desde Google Docs con esa configuración ya aplicada.

      Recuerde que si se trata sólo de una hoja dentro del archivo, puede ser necesario ajustar individualmente cada hoja u objeto según corresponda.

      Responder a Gbot
  2. B3 Dsgn3r marzo 22 de 2023

    Hola, muy buenas tardes:

    Excelente tutorial. Yo tengo un macro diferente que me ha funcionado muy bien. La situación que se me presenta es que tengo protegida la hoja (celdas bloqueadas por seguridad) y, cuando le doy clic al botón para que me genere el archivo PDF, me dice que no se puede hacer debido a las celdas bloqueadas.

    Este es el código del macro:

    “`vba
    Sub guardapdf()
    ‘Por. DAM
    uf = ActiveCell.SpecialCells(xlLastCell).Row
    ru = ThisWorkbook.Path & “”
    Range(“A1:K53”).Select
    Selection.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=ru & Range(“I4″) & ” – ” & Format(Range(“C11”)) & “.pdf”, _
    Quality:=xlQualityStandard, IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, OpenAfterPublish:=False
    End Sub
    “`

    Cuando me dice “depurar”, me subraya esta línea: `uf = ActiveCell.SpecialCells(xlLastCell).Row`.

    ¿Pueden ayudarme con esta situación? ¿Cómo puedo guardar el PDF aún con la hoja protegida?

    Estaré altamente agradecido.

    Responder a B3 Dsgn3r
    • DAVID en respuesta a B3 Dsgn3r junio 23 de 2024

      Saludos, hermano. Aquí está la solución para que tu archivo no te dé error donde indicas.

      Sub guardapdf()
      ActiveSheet.Unprotect “0000” ‘ COLOCAR CLAVE DE TU ARCHIVO

      uf = ActiveCell.SpecialCells(xlLastCell).Row
      ru = ThisWorkbook.Path & “”

      Selection.ExportAsFixedFormat Type:=xlTypePDF, _
      Filename:=ru & Format(Range(“I4″)) & ” – ” & Range(“C11”) & “.pdf”, _
      Quality:=xlQualityStandard, IncludeDocProperties:=True, _
      IgnorePrintAreas:=False, OpenAfterPublish:=False

      ActiveSheet.Protect “0000” ‘ COLOCAR CLAVE DE TU ARCHIVO

      MsgBox “Se ha exportado el documento exitosamente”, vbInformation
      End Sub

      Espero que te ayude.

      Ah, sabes que yo quiero una macro parecida, pero que me guarde el documento con el nombre en función de dos celdas: F3 y G3. Traté de adaptar esta, pero no me sirve.

      Responder a DAVID
      • Avatar
        Gerencie.com en respuesta a DAVID junio 24 de 2024

        Intente con este código. Adapte el rango a convertir en pdf:

        Sub guardapdf()
        ‘ Desproteger la hoja activa
        ActiveSheet.Unprotect “0000” ‘COLOCAR CLAVE DE TU ARCHIVO

        ‘ Obtener la ruta del directorio del archivo actual
        ru = ThisWorkbook.Path & “\”

        ‘ Definir el nombre del archivo utilizando las celdas F3 y G3
        Dim nombreArchivo As String
        nombreArchivo = Range(“F3″).Value & ” – ” & Range(“G3”).Value & “.pdf”

        ‘ Exportar el rango A1:G30 como PDF
        Range(“A1:G30”).ExportAsFixedFormat Type:=xlTypePDF, _
        Filename:=ru & nombreArchivo, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False

        ‘ Proteger nuevamente la hoja activa
        ActiveSheet.Protect “0000” ‘COLOCAR CLAVE DE TU ARCHIVO

        ‘ Mostrar mensaje de éxito
        MsgBox “Se ha Exportado el documento Exitosamente”, vbInformation
        End Sub

        Responder a Gerencie.com
  3. Kevin Serna octubre 11 de 2022

    Hola, vengo a consultar sobre una característica especial para la macro. Resulta que cuando la ejecuto, me guarda 4 páginas de PDF, en lugar de solamente una con la selección de celdas que yo quiero guardar. Quisiera saber si me pueden ayudar a seleccionar un rango de celdas en lugar de la hoja completa.

    Muchísimas gracias por el artículo.

    Responder a Kevin Serna
    • Gbot
      Gbot en respuesta a Kevin Serna agosto 17 de 2024

      Para guardar un rango de celdas en PDF, debe ajustar el área de impresión a ese rango. Puede hacerlo manualmente o programáticamente con VBA. Aquí hay un ejemplo simple: “`vba Sub GuardarComoPDF() Dim ruta As String ‘ Cambia la ruta según tus necesidades ruta = “C:\ruta\archivo.pdf” ‘ Establecer el área de impresión ActiveSheet.PageSetup.PrintArea = “$A$1:$D$10” ‘ Exportar a PDF ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta, Quality:=xlQualityStandard End Sub “` En este caso se guarda el rango A1:D10 como archivo.pdf en C:\ruta\.

      Responder a Gbot
    • Gbot
      Gbot en respuesta a Kevin Serna agosto 17 de 2024

      Para guardar un rango de celdas como PDF en lugar de la hoja completa, debes ajustar el código VBA para que seleccione solo las celdas que deseas exportar. Aquí tienes un ejemplo básico: “`vba Sub GuardarComoPDF() Dim ws As Worksheet Set ws = ThisWorkbook.Sheets(“NombreDeTuHoja”) ‘ Cambia “NombreDeTuHoja” por el nombre real de tu hoja Dim rng As Range Set rng = ws.Range(“A1:C10”) ‘ Cambia “A1:C10″ por el rango que desees exportar a PDF rng.ExportAsFixedFormat Type:=xlTypePDF, Filename:=”C:\Ruta\Archivo.pdf”, Quality:=xlQualityStandard End Sub “` En este código: – `ws` es la variable que representa la hoja donde se encuentra el rango. – `rng` es la variable que representa el rango específico que deseas exportar a PDF. Asegúrate de cambiar `”NombreDeTuHoja”` y `”A1:C10″` según tus necesidades reales.

      Responder a Gbot
  4. MOY-GDL marzo 3 de 2022

    Buenas tardes. Utilizo una macro para guardar una hoja en formato PDF, prácticamente como lo muestran aquí (perfecto), solo que tengo el problema de que el PDF generado necesita ser firmado con una tableta para incrustar la firma. Sin embargo, el archivo (sospecho que en su configuración) no me permite hacerlo, y esto solo ocurre cuando lo genero desde una macro o si lo creo manualmente mediante una impresión. Sin embargo, si grabo el PDF utilizando la opción “Guardar como PDF” de forma manual, sí me lo permite. ¿Habrá algún parámetro que falte especificar para que me permita incrustar la firma al momento de guardarlo?

    Responder a MOY-GDL
    • Gbot
      Gbot en respuesta a MOY-GDL agosto 17 de 2024

      Para asegurarte de que el PDF generado por tu macro sea apto para la firma digital, debes considerar los siguientes aspectos: 1. **Configuración del objeto `PDF`**: Asegúrate de que estás utilizando las opciones correctas al guardar el archivo PDF. Por ejemplo, verifica si estás estableciendo correctamente las propiedades relacionadas con la compatibilidad y seguridad del documento. 2. **Compatibilidad con versiones anteriores**: Si es posible, intenta establecer una versión de compatibilidad más baja en tu código VBA al generar el PDF. Esto puede ayudar a garantizar que se mantenga la capacidad de firmar digitalmente incluso cuando se utiliza un software diferente para abrirlo o procesarlo posteriormente. Ejemplo (siempre revisa qué versiones son compatibles): “`vba ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=pdfFilePath & pdfFileName _ , Quality:=xlQualityStandard, IncludeDocProperties:=True _ , IgnorePrintAreas:=False ‘Ajuste añadido CompatibilityMode := xlNotSet End Sub “` 3. **Seguridad y permisos**: Revisa si hay restricciones aplicadas al archivo PDF generado por tu macro que impidan su modificación o firma digital posterior. Debes permitir como mínimo “agregar comentarios” y “rellenar formularios”. Puedes probar eliminando temporalmente cualquier restricción para ver si eso soluciona el problema; luego puedes ajustar según tus necesidades específicas sin comprometer la capacidad de firmar documentos digitales sobre ellos generados mediante macros u otros métodos automáticos similares a manuales como impresión virtual a pdf desde Excel/Word/PowerPoint/etcétera y/o generación directa desde programas especializados e independientes (como SolidWorks).

      Responder a Gbot
    • Gbot
      Gbot en respuesta a MOY-GDL agosto 17 de 2024

      El problema que estás enfrentando parece estar relacionado con las opciones de configuración del PDF al momento de generarlo mediante la macro. Cuando utilizas “Guardar como PDF”, el archivo se crea con configuraciones predeterminadas que permiten la firma digital, mientras que cuando usas una macro o imprimes a PDF, es posible que no estés utilizando las mismas configuraciones.

      Para solucionar esto, puedes probar lo siguiente:

      1. **Configuración del controlador de impresión**: Si estás usando un controlador de impresión virtual para generar el PDF (como Microsoft Print to PDF), asegúrate de configurar correctamente sus opciones para permitir la inclusión de firmas digitales. Esto puede incluir habilitar características específicas en el controlador.

      2. **Uso de bibliotecas externas**: Considera utilizar bibliotecas externas como iTextSharp (para .NET) o PyPDF2 (para Python) para crear PDFs más personalizables y compatibles con firmas digitales.

      3. **Revisar propiedades del documento**: Asegúrate también de revisar las propiedades del documento en tu código VBA/Excel antes y después de guardarlo; algunas configuraciones pueden afectar su capacidad para aceptar firmas digitales.

      4. **Comparar archivos**: Genera un archivo tanto desde la macro como desde “Guardar como” y compáralos byte por byte; así podrás identificar qué diferencias existen entre ambos archivos y qué opción/configuración está causando ese comportamiento distinto.

      5.  **Ejemplo básico en VBA:** Aquí tienes un ejemplo básico en VBA donde se guarda una hoja activa como PDF:
      “`vba
      Sub GuardarComoPDF()
      Dim ruta As String
      ruta = ThisWorkbook.Path & “\miArchivo.pdf”

      ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta, Quality:=xlQualityStandard _
      , IncludeDocProperties:=True, IgnorePrintAreas:=False
      End Sub
      “`
      Asegúrate también aquí que `IncludeDocProperties` esté establecido correctamente según tus necesidades.
      Si sigues teniendo problemas luego intenta guardar el archivo manualmente justo después haberlo creado mediante macros o scripts automáticos; si funciona bien entonces revisa nuevamente los parámetros utilizados dentro del script/macro.

      Responder a Gbot

Este sitio web utiliza cookies propias y de terceros para ofrecer un mejor servicio. Al seguir navegando acepta su uso.