Una hoja de Excel se guarda en PDF desde «Archivo», «Exportar», o con una macro que use el método ExportAsFixedFormat, útil cuando se generan PDF con frecuencia, por ejemplo facturas o certificados con un nombre tomado de una celda. ¿Cómo se hace de cada forma y cómo se ajusta la hoja para que el PDF salga en una sola página?
Guardar en PDF sin macros.
Para guardar la hoja activa en PDF, los pasos son estos:
- Ir a «Archivo», «Exportar», «Crear documento PDF/XPS», o a «Archivo», «Guardar como» y elegir «PDF» en la lista «Tipo».
- Escribir el nombre y elegir la carpeta.
- En «Opciones», elegir si se publica la selección, las hojas activas o todo el libro.
- Hacer clic en «Publicar» o «Guardar».
Excel genera el PDF con la configuración de página de cada hoja. Si el resultado sale cortado o en varias páginas, hay que ajustar la hoja antes de exportar.
Ajustar la hoja para que el PDF quede bien.
La configuración se hace en la pestaña «Disposición de página» y se revisa en la vista previa de impresión (Ctrl + P). Los ajustes más útiles son estos:
- Área de impresión: se selecciona el rango que debe salir en el PDF y se elige «Área de impresión», «Establecer área de impresión».
- Orientación: «Horizontal» para tablas anchas.
- Ajustar a una página: en «Ajustar área de impresión», «Ancho» en 1 página y «Alto» en automático.
- Márgenes: «Estrechos», para aprovechar mejor la hoja.
Estos ajustes se guardan con el libro y los respetan tanto la exportación manual como las macros.
Macro para exportar la hoja a PDF.
Las macros se escriben en el editor de Visual Basic (Alt + F11), en «Insertar», «Módulo». Esta guarda la hoja activa en un PDF, en la misma carpeta del libro y con el nombre de la hoja, y lo abre:
Sub ExportarHojaPDF()
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & ActiveSheet.Name & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True
End Sub
Los argumentos significan lo siguiente:
- Type:=xlTypePDF: el formato de salida; con xlTypeXPS se genera un XPS.
- Filename: la ruta y el nombre del archivo. ThisWorkbook.Path es la carpeta del libro, que debe estar guardado.
- Quality: xlQualityStandard para calidad normal o xlQualityMinimum para un archivo más liviano.
- IncludeDocProperties: incluye en el PDF las propiedades del libro, como el autor.
- IgnorePrintAreas: con False se respeta el área de impresión; con True se exporta todo lo que tiene datos.
- OpenAfterPublish: con True abre el PDF al terminar.
El guion bajo al final de una línea permite partir una instrucción larga en varias líneas. Para ejecutar la macro con un clic se le asigna a una forma o a un botón, como se explica en el artículo sobre cómo crear un botón en Excel.
Guardar en PDF con el nombre de una celda.
Para que cada PDF tenga un nombre distinto, por ejemplo el número de factura y el cliente que están en F3 y G3, se arma el nombre con esas celdas. Esta macro exporta solo el rango A1:G30:
Sub ExportarRangoConNombreDeCeldas()
Dim nombre As String
nombre = Range("F3").Text & " - " & Range("G3").Text
Range("A1:G30").ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=ThisWorkbook.Path & "\" & nombre & ".pdf", _
Quality:=xlQualityStandard, IgnorePrintAreas:=True, _
OpenAfterPublish:=False
MsgBox "PDF guardado: " & nombre & ".pdf"
End Sub
Se usa la propiedad Text, y no Value, para que una fecha o un número se tomen como se ven en la celda. Los nombres de archivo no admiten los caracteres \ / : * ? " < > |; si una celda puede contenerlos, por ejemplo una fecha con barras, hay que reemplazarlos. El módulo descargable incluye una función que lo hace.
Exportar en horizontal desde la macro.
Si la hoja no tiene configurada la orientación, la macro puede hacerlo antes de exportar:
With ActiveSheet.PageSetup
.Orientation = xlLandscape
.Zoom = False
.FitToPagesWide = 1
.FitToPagesTall = False
End With
Con estas líneas antes de ExportAsFixedFormat, el PDF sale en horizontal y con todas las columnas en una página de ancho.
Exportar con la hoja protegida.
ExportAsFixedFormat funciona aunque la hoja esté protegida. Lo que falla en una hoja protegida son otras instrucciones de la macro, como SpecialCells o Select sobre celdas bloqueadas. Por eso, si la macro se detiene en una de esas líneas, la solución es eliminarlas si no son necesarias, o desproteger la hoja al comienzo con ActiveSheet.Unprotect "clave" y protegerla al final con ActiveSheet.Protect "clave".
Exportar todo el libro o cada hoja por separado.
Para exportar todas las hojas en un solo PDF, se aplica el método al libro en lugar de a la hoja: ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=… Para generar un PDF por cada hoja, se recorre la colección de hojas con For Each y se exporta cada una con su nombre. Ambas macros están en el módulo descargable.
Descargar las macros.
El este archivo encuentra una serie de machos que le permitirán automatizar el guardado del archivo en Pdf.
Preguntas frecuentes.
A continuación respondemos las preguntas frecuentes de nuestros lectores.
¿Cómo guardo una hoja de Excel en PDF?
Con «Archivo», «Exportar», «Crear documento PDF/XPS», o con «Guardar como» eligiendo el tipo PDF.
¿Cómo hago que el PDF quede en una sola página?
En «Disposición de página», ajustando el ancho a 1 página y, si hace falta, la orientación horizontal.
¿Cuál es la macro para guardar en PDF?
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta y nombre del archivo.
¿Cómo guardo el PDF con el nombre de una celda?
Armando el Filename con el valor de la celda: ThisWorkbook.Path & "\" & Range("F3").Text & ".pdf".
¿Cómo exporto solo un rango a PDF?
Aplicando ExportAsFixedFormat al rango, por ejemplo Range("A1:G30"), o estableciendo antes el área de impresión.
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.
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.
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