Como ya vimos la vez pasada, podemos usar funciones para hacer nuestros documentos autollenables, capaces de validar datos y con funciones de búsqueda si se trata de libros grandes y ordenados. Ahora imagina que nos toca imprimir todos esos formatos al mismo tiempo y no son pocos, sino que pueden ser hasta cientos que nos llevarían todo el día. Por eso vamos a ver como podemos crear PDF masivos desde las macros en Excel.
Lo mas común para guardar un respaldo de un archivo que ya no vamos a modificar es hacerlo en formato .pdf, ya que este es un formato que nos garantiza la integridad de la información y una vista de impresión limpia.
Si buscas imprimir un libro de Excel a un nuevo archivo PDF, aquí te dejo un libro de ejemplo con un sencillo y útil macro que te permitirá imprimir muchos documentos. Para descargarlo, solo da click aquí. Y sí: solo necesitas hacer un par de ajustes para poder usarlo en tus propios archivos.
Para ajustarlo, solo cambia el formato de la hoja «Forma» y rellena con tus datos en lugar de los míos en la tabla de la hoja «Datos». Asegúrate de que la primera columna de esa tabla tenga los datos únicos que usarás para la impresión.
Macro completo
Y si te interesa aprender a hacer esto desde cero, lo primero que debemos hacer si queremos imprimir un libro de Excel a formato PDF es ir a la pestaña «Desarrollador» y escribir las siguientes líneas de código dentro de un nuevo módulo:
Sub imprimir_pdf()
' Declarararemos primero las variables
Dim data, forma As Worksheet 'para tomar las hojas directo
Dim i As Long
Dim pathToSave As String
Set data = ThisWorkbook.Sheets("Datos")
Set forma = ThisWorkbook.Sheets("Forma")
i = 0
'Recorremos las filas de la tabla con el loop
Do Until data.Range("A2").Offset(i, 0).Value = ""
pathToSave = Application.DefaultFilePath _
& Application.PathSeparator _
& data.Range("A2").Offset(i, 0).Value & ".pdf"
forma.Range("D2").Value = data.Range("A2").Offset(i, 0).Value
With forma ' Tomamos la hoja para imprimir
.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=pathToSave, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End With
i = i + 1 'Bajamos una fila en la tabla
Loop
End Sub
Luego vamos a presionar ALT + F8 para seleccionar el macro que acabamos de hacer y ya solo queda dejar que Excel haga el resto e imprima por ti.
Macro explicado paso a paso
Si te interesa hacer algunos ajustes adicionales a tu nuevo archivo en PDF, estos son los parámetros que puedes alterar a tu gusto:
- «FileName:=» corresponde al nombre del archivo PDF a crear. Este debe llevar la dirección de la carpeta y el nombre del archivo .pdf. En este caso el archivo que se cree se llamará «muestra.pdf»[?] y se guardará en la carpeta de documentos estándar.
- «Quality:=» es para elegir la calidad de impresión del archivo, aunque solo puedes escoger entre «xlQualityMinimum» o «xlQualityStandard», siendo el segundo el más recomendable.
- «IncludeDocProperties:=» sirve para utilizar la configuración de impresión del libro o no, por lo cual solo se puede elegir «True» o «False», siendo la primera la más recomendable.
- «IgnorePrintAreas:=» es por si tienes definidas tus áreas de impresión, entonces el valor deberá ser «True», de lo contrario será «False».
- «OpenAfterPublish:=» decide si el documento nuevo se abrirá en cuanto termine de imprimirse. De ser así, la opción tendrá que estar marcada con «True», o con «False» de ser lo contrario.
Y si solo quisieras imprimir unas cuantas páginas, puedes agregar despues de OpenAfterPublish los parámetros «From:=» y «To:=» para marcar un rango de qué páginas deseas que sean impresas.
Esta forma de impresión se complementa muy bien con funciones como «For» y «Loop», las cuales también te recomiendo que conozcas y que puedes ver aquí y así puedas hacer tu propio libro automatizado que trabaje y revise por ti.
Cualquier duda nos leemos abajo.
muy buenos dias.
esta aportacion esta interesante pero desearia saber como seria si los pdf ya estan creados y quiero unirlos y ponerle numero de pagina y consolidarlo en uno solo con vba.
gracias.
Hola Enrique.
Con vba lo veo complicado, sera mejor usar otra herramienta como Adobe.
Saludos!
Hola
Muy buen aporte, la macro va genial…
Pero si en lugar que fueran PDF quisiera que fueran archivos de excel?
Hola Kevin!
En donde usas «Export as fixed Format» cambia todo eso por un «Workbook.SaveAs» y listo.
Saludos.
Buenas! gracias por este post tan interesante. He querido descargar el archivo que ofreces, pero el enlace no me funciona. Alguna sugerencia?
saludos!
Hola Nat.
Gracias por el aviso, ya esta arreglado al parecer.
De todas formas te envié el archivo por correo, te llegará a nombre de svallejo@excelcute.com.
Saludos!
Hola de gran ayuda tu aporte.
Tengo una duda, si solo quiero exportar una sola fila y decirle que exporte toda la fila que coincida con una clave ingresada o seleccionada)?
Saludos,
Hola Fernando.
Gracias y que bueno que te sirve.
Si solo quieres algunas filas, tendrías que:
– Crear un bloque IF dentro de tu loop para evaluar que filas quieres.
– Si se cumple la condición, llevarte esa fila a otra hoja de Excel para luego exportarla.
básicamente, todo consiste en que tengas en una hoja limpia los datos que quieres.
Cualquier duda, escríbeme a svallejo@excelcute.com
Saludos.
Buen tutorial, muchas gracias es un interesante aporte, una consulta, como se podría hacer para que todas las hojas generadas se guarden en un solo archivo PDF.
Gracias por tu respuesta
Hola German.
Muchas gracias por la felicitación.
Para resolver el imprimir multiples hojas, el metodo ExportAsFixedFormat tiene dos parametros opcionales más:
– From: Que sería el número de hoja inicial
– To: Que sería el número de hoja final.
Seleccionando el rango de hojas en ese parámetro puedes imprimir multiples hojas en un solo PDF.
Saludos!