Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado
Logo Excel Avanzado

Exportar varias hojas de Excel a PDF VBA

| 3 comentarios

La generación de reportes en Excel es un tema muy común hoy en día, diversas áreas en las empresas la usan para facilitar la interpretación de información a partir de una gran cantidad de datos recabados en el tiempo de funcionamiento de la empresa. Estos reportes generalmente son enviados como archivo completo de Excel, lo cual no resulta conveniente por el peso del archivo o la probabilidad de que el usuario modifique los datos que se han recopilado y usado en la generación de dichos reportes. 

Para estos inconvenientes se ha visto en la necesidad de generar reportes con formato pdf a partir del uso de las macros. El código es de gran utilidad ya que simplemente se tiene que dar click a un botón para generar el reporte en formato pdf dándonos la ventaja de no tener que adjuntar el archivo para enviarlo por correo, simplemente se enviará el archivo pdf. 

Crear PDF  con la hoja activa

El objetivo ya planteado es crear un archivo PDF con la información que se tiene en la hoja activa, en este caso usaremos la tabla de la hoja “Atenciones”. Para esta acción se usarán conceptos ya usados anteriormente como conceptos nuevos en la sintaxis que se explicarán posteriormente.

El código usado en este caso es el siguiente:

Sub CrearPDF()

Dim NombreArchivo, RutaArchivo As String

NombreArchivo = ActiveSheet.Name

RutaArchivo = ActiveWorkbook.Path & "\" & NombreArchivo & ".pdf"

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _

Quality:=xlQualityStandard, IncludeDocProperties:=True, _

IgnorePrintAreas:=False, OpenAfterPublish:=False

End Sub

En primer lugar, se iniciará un nuevo procedimiento con el nombre de "CrearPDF" para poder identificar a la macro. Luego se procede a nombrar los distintos tipos de variables que se van a usar y se definen los valores que tomara cada variable.

-NombreArchivo :  Tomará como valor el nombre de la hoja activa.

-“Ruta de Archivo” :  Tomará el valor de la ruta de archivo donde se guardará el nuevo archivo en pdf .

-ActiveWorkbook.Path :  Se refiere al directorio donde se ubica el libro con el cual se está trabajando

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF : Sintaxis referida a la exportación de la hoja activa como formato pdf.

El código seguido se refiere al formato básico que llevará el nuevo archivo con respecto a la calidad, propiedades del documento, área de impresión y la acción de abrir luego de crear el archivo.

Exportar varias hojas de Excel a PDF 

A continuación, se muestra el código usado para crear archivos pdf por cada hoja del libro con el cual se está trabajando:

Sub CreaPDFhojas()

Dim hoja As Worksheet

Dim NombreArchivo, RutaArchivo As String

For Each hoja In Worksheets

NombreArchivo = hoja.Name

RutaArchivo = ActiveWorkbook.Path & "\" & NombreArchivo & ".pdf"

hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _

Quality:=xlQualityStandard, IncludeDocProperties:=True, _

IgnorePrintAreas:=False, OpenAfterPublish:=False

Next hoja

End Sub 

Se ha usado la instrucción del For Next para poder iterar la creación de archivos pdf para cada una de las hojas de un libro. Esto nos permite el ahorro de tiempo al momento de tener un archivo de Excel con numerosas hojas que se desean llevar a formato pdf.

 

RECOMENDACIONES: No tener archivos pdf con los mismos nombres de las hojas del archivo Excel con el que se quiere trabajar.

Puede ver el código completo de la macro en el archivo de Excel adjunto: Exportar varias hojas de Excel a PDF VBA

 

Por: Luis Flores Saenz 

3 comentarios

  1. Muy Interesante. Felicitaciones

  2. Me gustaría crear un sólo pdf con varias hojas del excel. Gracias.

  3. Una pregunta como le hago para añadir el nombre del libro y el del la hoja?
    lo intenté con:
    NombreArchivo = ActiveWorkbook.Name & hoja.Name
    y me sale así:
    ProyectoE732.xlsCALCULOS.PDF
    Como le quito el .xls?

Deja una respuesta

Los campos requeridos estan marcados con *.