La generación de reportes en excel es el pan de cada día, especialmente en lo referente a Formatos Contables, pero no siempre es conveniente enviar un archivo completo cuando te piden un reporte y lo tienes que adjuntar en un correo, para resolver esto veremos como generar archivos PDF con una macro excel.
La idea es muy simple, al dar click en un Botón se debe generar un archivo PDF de la hoja activa o de alguna hoja en especifico.
El código es realmente simple pero muy potente y sobre todo de gran utilidad, con el hecho de que simplemente tienes que dar click en un botón para generar tu reporte en formato PDF vale la pena, ademas de la gran ventaja de no tener que adjuntar tu archivo para enviar por correo.
Option Explicit
Sub CreaPDF()
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
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
Uno de los usos mas comunes de excel es en la contabilidad, así que estoy seguro que los contadores sacaran un gran provecho de esta pequeña macro adaptando la a sus necesidades.
Un ejemplo de adaptación es la segunda macro que se ve en el vídeo y en esta imagen, en ese caso se usa un ciclco para recorrer las hojas de libro y generar un PDF por cada una de ellas, obviamente en la mayoría de los casos la generación de los PDF sera selectiva, para ello simplemente se adapta la primera macro para cada hoja que deba convertirse a PDF, pero esa segunda macro también puede ser de mucha ayuda en algunos casos particulares.
abraham dice
Buenas tarde,
para que me guarde varios archivos dependiendo el numero de folio
Berna dice
Excelente, pero tengo una duda:
Al querer guardar el archivo PDF en una ruta de Onedrive dentro de mi PC donde esta sincronizando Onedrive (Valga la dedundancia) lo genera el PDF… me pueden ayudar
Eugenio Espronceda dice
Hola, muy buena macro, tengo un problema, quisiera imprimir los pdf´s sin tener que abrirlos, hacerlo directamente desde el menú contextual, pero no me aparece la opción, ¿alguna sugerencia?, gracias de antemano.
Marilia dice
Hola. ¿Qué dato tengo que indicar para generar un pdf con 4 columnas y varias filas y que salga en horizontal, ya que pueden ser datos extensos en cada columna. ¿Y como indico la medida de cada columna? Tengo que genera muchos pdf. En algunos casos pueden ser 800.
Muchísimas gracias por su ayuda.
edmon zelaya dice
Buenos días
puedo editar un pdf con macros. tengo unos datos en Excel quiero editar el pdf con esos datos
Pablo dice
Hola, Excelente y muchas gracias!
Te consulto, como podría modificar la segunda macro, pero que no imprima todas las hojas, sino las que yo quiera. Es decir, no quiero que imprima las primeras hojas de registros, pero si quiero que imprima todas las otras hojas.
joeñ dice
Con este codigo selecciono dos celdas como le dejo el espacio para que no se peguen
NombreArchivo = Range(“A1”) & Range(“A2”).Value
Roanld GIles dice
NombreArchivo = Range(“A1”) & ” ” & Range(“A2”).Value
Fredy dice
Junto con saludar les solicito de su ayuda para el siguiente caso.
Acabo de terminar de una planilla donde la hoja “Horario-Cursos” tiene un informe “horario de clases” este tiene en la celda “D9” una lista desplegable de los cursos, despliega los nombres “1ºA, 1ºB, 1ºC, 1ºD, 1ºE – este orden hasta 4ºE.” cuando se elige el curso, se realiza la consulta llenando la planilla configurada con todos los datos de las asignaturas, docentes, salas, etc.
Es posible crear una macro que permita exportar el informe de cada curso mencionado bajo estas condiciones.
-Exportar a PDF todos los cursos que aparecen en la lista desplegable:
1ºA
1ºB
1ºC
1ºD
1ºE
2ºA
2ºB
2ºC
2ºD
2ºE
3ºA
3ºC
3ºD
3ºE
4ºA
4ºC
4ºD
4ºE
-Nombre de los archivos a exportar :
“1_1ºA_HORARIO_03-MAYO-2020.pdf”
“2_1ºB_HORARIO_03-MAYO-2020.pdf”
“3_1ºC_HORARIO_03-MAYO-2020.pdf”, etc.
Esta lista de nombres lo tengo en otra hoja del libro, nombre “BASE” rango de celdas : V2:V19.
-Directorio de salida de los archivos “C:\Horarios\PDFOut\”
-Mostrar un mensaje cuando comienza y termina todo el proceso de exportación.
La hoja “Horario-Curso” donde se encuentra el informe se encuentra configurada el área de impresión.
Adjunto captura. Espero una buena acojida a mi consulta desde ya muchas gracias.
Quedo atento.
Saludos.
Rex dice
Te pongo el ejemplo de la hoja que genero en PDF con 2 características:
1.- Toma el nombre para el PDF de una celda especificamente (Z5)
2.- Guarda en documento en una ubicación distinta a la ubicación del excel original (“R:\Doc…..)
Adicionalmente quiero, después de generar el PDF, ubicarme en la celda Z4
Te muestro la macro:
Option Explicit
Sub CrearPDF()
Dim NombreArchivo, RutaArchivo As String
NombreArchivo = Range(“Z5”).Value
RutaArchivo = “R:\Documentos\Materiales\Ordenes” & “\” & NombreArchivo & “.pdf”
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
Range(“Z4”).Select
End Sub
raul dice
TENGO UN EROOR 1004 DONDE DICE QUE EL DOCUMENTO NO SE HA GUARDADO. O PUEDE QUE EL DOCUMENTO ESTE ABIERTO O QUE SE HAYA ENCONTRADO UN ERROR AL GUARDAR
AYUDAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
MI MACRO ES LA SIGUIENTE¨:
Sub PDF()
Application.ScreenUpdating = False
Dim primera, ultima, empleados As Integer
Dim rdato
Dim n As Range
Dim Mensaje, Estilo, Título, Ayuda, Ctxt, Respuesta, MiCadena
Dim Ruta As String
Dim NombreArchivo As String
Dim hoja As Object
Sheets(“Tareo de Semana”).Select
Range(“B10”).Select
Do While ActiveCell Empty
ActiveCell.Offset(1, 0).Select
Loop
ActiveCell.Offset(-1, 0).Select
ActiveCell.Offset(0, -1).Select
empleados = ActiveCell.Value
Sheets(“Boletas”).Select
primera = Range(“R13”).Value
ultima = Range(“S13”).Value
If Range(“R13″).Value = Empty Then
MsgBox prompt:=”Debe ingresar la primera boleta”, Buttons:=vbokon1y + vbCritical, Title:=”Llene campos vacíos”
Range(“R13”).Select
Exit Sub
End If
If Range(“S13″).Value = Empty Then
MsgBox prompt:=”Debe ingresar la última boleta”, Buttons:=vbokon1y + vbCritical, Title:=”llene campo vacío”
Range(“S13″).Select
Exit Sub
End If
If primera > ultima Then
MsgBox prompt:=”Primera de boleta mayor a la ultima boleta”, Buttons:=vbokon1y + vbCritical, Title:=”Inconsistencia”
Range(“R13″).Select
Exit Sub
End If
If primera > empleados Then
MsgBox prompt:=”Primera boleta fuera de rango”, Buttons:=vbokn1y + vbCritical, Title:=”Inconsistencia = ERROR”
Range(“R13”).Select
Exit Sub
End If
If ultima > empleados Then
Range(“S13″).Value = empleados
MsgBox prompt:=”Última boleta no puede ser mayor a ” & empleados & ” Empleados”, Buttons:=vbokon1y + vbCritical, Title:=”Inconsistencia = ERROR”
Range(“S13”).Select
ultima = empleados
Exit Sub
End If
If ultima < primera Then
MsgBox prompt:="Último número es menor al primer nùmero", Buttons:=vbokon1y + vbCritical, Title:="Inconsistencia"
Range("S13").Select
Exit Sub
End If
Mensaje = " ¿Desea GUARDAR Boletas desde la " & primera & " hasta la " & ultima & " ? "
Estilo = vbYesNo + vbQuestion + vbDefaultButton2 'Define los botones.
Título = "Imprime Boletas de Sueldos" 'Define los titulos.
Ayuda = "DEMO.HLP" 'Define los archivos de ayuda.
Ctxt = 1000 'Define el tema.
'el contexto.
'muestra el mensaje.
Respuesta = MsgBox(Mensaje, Estilo, Título, Ayuda, Ctxt)
If Respuesta = vbYes Then 'el usuario eligió el boton Si.
MiCadena = "Si" 'ejecuta una acción.
Else 'el usuario eligió el boton No.
MiCadena = "No" 'ejecuta una acción.
Exit Sub
End If
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = " SELECCIONAR CARPETA"
.Show
If .SelectedItems.Count = 0 Then
'Nada
Else
Ruta = .SelectedItems(1)
For i = primera To ultima
Range("P6").FormulaR1C1 = i
NombreArchivo = Range("P3").Value
MsgBox "GUARDANDO ARCHIVO " & NombreArchivo, vbInformation, "RAÚL GUTIERREZ"
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Ruta & "\" & NombreArchivo & ".pdf", _
OpenAfterPublish:=False
Next
Range("P6") = ultima
Range("R13").Select
End If
End With
End Sub
Casilda Gomez dice
hola gracias por tu macro es excelente me podrías ayudar con lo siguiente?
quisiera saber como puedo hacer para que me genere un PDF diferente cada vez que modifique datos en la hoja activa ose tengo una hoja de recibo en excel y quiero que me guarde en un pdf diferente cada vez que le de a guardar en pdf recibo 1 cambio datos guardar recibo 2 asi sucesivamente
Armando Vargas Schwarzenberg dice
Hola:
He utilizado ambas en un archivo xlsm, pero al intentar imprimir varias hojas (unas 10), me salta un error en la línea 7, es decir:
hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
El error dice: “Se ha producido el error ‘5’ en tiempo de ejecución: Argumento o llamada a procedimiento no válida”
el procedimiento no tiene otro cambio que el nombre (“Public Sub ImprimeHojasPDF()”) que no creo que sea el problema. Espero poder contar con la ayuda de alguien que pueda ser mucho más aporte que yo.
Muchas Gracias.
Daniela dice
Hola me sale el mismo error y me marca en amarillo
hoja.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
pero me marca el cursor
IgnorePrintAreas:=False, OpenAfterPublish:=False
la ultima linea
crea bien los archivos Me por¿dria decir como puedo salvar el error. Gracias
Carlos Mago dice
Necesito que el PDF generado tenga password ¿como podría lograrlo?
Jose Ramirez dice
¿Como cambio el área de impresión para una hoja con encabezado y pie de pagina? Gracias de antemano.
Gaby dice
SOS LO MAS, ME RESOLVISTE MI PROBLEMA
Fj dice
Hola,como hago para cambiar la ruta en la que se guarda el pdf?
Gracias.
Nolberto Lopez dice
Saludos.
Para eso solo hay que cambiar ActiveWorkbook.Path por la ruta donde lo quieres.
Fj dice
Vale,gracias,por fin lo consegui
yerly Serrano dice
Buenas Tardes,
Se a Producido el error 5 en Tiempo de Ejecucion
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:=True
End Sub
Me esta Apareciendo el siguiente error, no lo he podido ejecutar.
Me podrian ayudar por favor
jesus dice
tengo una duda tengo creado un formulario sin el excel
lo cree en un userfom y tengo un boton que cuando lo presione me lanza una ficha del servicio y yo quisiera que lo comvierta ese tiket en PDF (el tiket que me lanza esta programado en un label) y como trendria que programar en un boton eso??
Giovanna zetina dice
Buen día,
Una pregunta, cómo puedo hacer para que las 20 hojas que tengo en un libro de excel se guarden en pdf pero con el dato de la celda C7 de cada una de las hojas? (el dato en cada hoja es diferente y se va cambiando diario y es un número de 5 dígitos).
Lo que busco es tener las hojas de pdf guardadas con los dígitos de la celda C7 de cada hoja d excel.
Hay modo de hacerlo?
Saludos,
Diego dice
Excelente explicativo, mas claro imposible!
He compartido para descargar pero en rar, es posible que puedan enviarme como zip
José Villacís dice
Al ejecutar la macro aparece error ‘1004’ en tiempo de ejecución y me manda a configurar impresoras. Al agregar impresora sale que los servicios de dominio no están disponibles.
AishaE dice
Excelente!!!
Mil gracias. Esperaba que pudiera hacerse, pero no tenia idea de cómo.
Gracias por compartir todo el conocimiento y contribuir a que sigamos creciendo como profesionales.
Muy agradecida.
Carlos Basaldúa dice
Excelente macro. Te agradezco que la hayas compartido.
Susana Saenz dice
Hola buen día, necesito esto mismo pero que guarde el archivo con un nombre que yo le asigne en un libro de excel. Es posible?
Gracias y Saludos
Nolberto Lopez dice
Saludos Susana.
Si es posible, si observa el código hay una linea donde se asigna el nombre, en este caso puedes cambiar esa linea para que haga referencia a una celda donde este el nombre, ejemplo:
NombreArchivo = Hoja1.range("A1")
joseph gamez dice
y sabes como seria si quiero hacerlo en word
Jonathan dice
gracias por su aporte, yo lo uso para generar cotizaciones. Si quiero que tome el nombre de la celda A6 para guardar el archivo pdf, que le tengo que modificar.
Fernando Valenzuela dice
excelente ejemplo con Guardar PDF,
tengo otra consulta, al guardar la hoja con nombre de una celda, como lograr si guardo varias veces no borre el primero, segundo ,………. guardado.
“Es una hoja que guardo, pero van cambiando datos y por esta razón no debo sobrescribir cada vez que guarda,
te agradecería alguna ayuda,
atentamente,
Fernando Valenzuela
Damaris dice
Me resultó perfecto con algunas modificaciones que se adaptan a lo que necesito.
Option Explicit
Sub CreaPDF()
Dim NombreArchivo, RutaArchivo, historico, separador As String
NombreArchivo = Cells(7, 3).Value
RutaArchivo = Cells(42, 2).Value
historico = Cells(3, 6).Value
separador = “-”
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo & NombreArchivo & separador & historico, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
Esa macro me exporta a un pdf la planilla que tengo en una ruta definida por mi. Lo que necesito hacer ahora es que la celda F7 que contiene una lista desplegable se ejecute sola hasta el final sin necesidad que tenga que estar desplegando uno por uno para exportarlos. Me podrías ayudar por favor.
Róger León Guzmán dice
Guardo el código, pero al cerrar el archivo, queda en blanco y no funciona la activación del macro.
Saludos.
jonathan dice
quiero que inicie de la fila 7, que le tengo que cambiar para que no salgan los botones
Piers dice
Muchas gracias por compartir este material, como podría guardar esos reportes de pdf en una carpeta asignándole la ruta desde el codigo.
Nolberto Lopez dice
Saludos Piers.
El valor de la variable RutaArchivo debe cambiar ActiveWorkbook.path por la ruta donde se debe guardar, para obtener esa ruta, solo guarde algun archivo en esa carpeta, de click derecho en ese archivo/ propiedades… en la información vera la ruta, puede seleccionar esa ruta, control c para copiar y pegarlo en el código de la macro.
Isaac Fidalgo dice
Muy buen tutorial pero tengo una duda, si por ejemplo necesito que el archivo PDF que crea, tenga el nombre de lo que contiene una celda del archivo en excel por ejemplo la celda (A3), Que debo modificar? para que al modificar la celda (A3) y crear el PDF cree el PDF con lo que diga esta celda
Nolberto Lopez dice
Para eso debe cambiar:
NombreArchivo = ActiveSheet.Name
Por
NombreArchivo = Range(“A3”)
nuria gamez zuñiga dice
Excelente.
Estoy encantada
Una herramienta muy útil. Cada día un gran aprendizaje definitivamente.
Es algo sencillo y hace que uno se enamore mas del conocimiento.
Gracias
danilo efren dice
Excelente ejercicio
Es bastante practico y te ahoras mucho trabajo.
Gracias por compartirlo.
Saludos
Danilo
Henrry L. dice
Gracias por este aporte, cuando enviaba información tenía que estar eliminando hojas y borrar datos no necesarios.
Wolfgang dice
Cual sera el error tiene mi macro, pues este es el codigo y siempre lo guarda en la carpeta mis documentos, quisiera que me apoye quiero guardarlo en la misma carpeta de archivo de origen.
Sub EXPORTAR()
‘ EXPORTAR Macro
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Range(“A1”)
Dim Ruta As String
Ruta = ThisWorkbook.Path & “\”
End Sub
Carlos dice
utilizando el mismo codigo y haciendo una pequeña modificacion para la ruta
NombreArchivo = ActiveWorkbook.name
NombreArchivo = Left(NombreArchivo, Len(NombreArchivo) – 5)
‘el -5 es dependiendo si es un excel .xlsx ó para .xls sería -4
RutaArchivo = ActiveWorkbook.Path & “\” & NombreArchivo & “.pdf”
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=RutaArchivo, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, _
IgnorePrintAreas:=False, OpenAfterPublish:=True