Una macro en Excel que exporta a PDF automatiza una tarea repetitiva: en lugar de ir a Archivo > Guardar como > PDF cada viernes, pulsas un botón y Excel guarda la hoja, le pone nombre y abre el archivo. Funciona en Excel 2007 en adelante, también en 2010, 2013, 2016, 2019, 2021, 2024 y Microsoft 365, tanto en Windows como en Excel para Mac. Al terminar el tutorial tendrás una macro pegada en un módulo, otra asignada a un botón dibujado en la hoja y sabrás resolver los tres errores más típicos (archivo guardado como .xlsx, macros bloqueadas y copia local no deseada).
Qué hace una macro que exporta a PDF y cuándo te ahorra tiempo
Imagina la hoja Ventas de tu tienda: cada viernes hay que mandarle al cliente el resumen de la semana. Hoy haces Archivo > Guardar como > PDF, escribes el nombre "Ventas semana X", eliges la carpeta del correo y le das a Enviar. El proceso lleva tres minutos, pero lo haces cuarenta semanas al año y siempre se te olvida un paso. Una macro que exporta a PDF lo reduce a un clic y quita los errores humanos (olvidar la carpeta, equivocarse de nombre, guardar varias hojas en lugar de una).
Excel trae de fábrica la opción de guardar como PDF desde la cinta: Archivo > Exportar > Crear PDF. El problema es que esa ruta hay que repetirla cada vez. Una macro de VBA es el atajo: un Sub que ejecuta los mismos pasos por ti. VBA lleva en Excel desde 1993, así que está en todas las versiones de escritorio; en Excel para la web no existe, allí se usa Office Scripts.
La macro usa el método ExportAsFixedFormat, que es la instrucción de VBA que convierte una hoja (o un libro entero) a PDF. La macro no es magia: es el mismo diálogo de Exportar, escrito en código. La diferencia es que el código se queda guardado dentro del propio archivo .xlsm, así que cualquier persona que abra ese libro en un Excel con macros puede ejecutarlo con un botón.
Lo que ganarás al final del tutorial: una hoja Ventas como la del ejemplo (cliente, producto, importe, fecha), una macro guardada en un módulo, un botón en la hoja que la lanza y la capacidad de cambiar la carpeta y el nombre del PDF cada vez que pulses.
Las piezas que necesitas tener listas antes de escribir la macro
Antes de abrir el editor, conviene tener cuatro cosas resueltas para que la macro funcione a la primera:
- Archivo guardado como .xlsm. Un libro con macros se guarda con la extensión .xlsm (Libro de Excel habilitado para macros); en .xlsx las macros se borran al guardar porque .xlsx no las soporta. La primera vez, al pulsar F12 (Guardar como), cambia el tipo a "Libro de Excel habilitado para macros".
- Pestaña Programador visible. Por defecto está oculta. Se activa en Archivo > Opciones > Personalizar cinta de opciones, marcando la casilla "Programador". En Mac va en Excel > Preferencias > Vista > Pestaña Programador.
- Editor de VBA a mano. Se abre con Alt+F11 (en Mac,
Opt+F11). Es una ventana aparte con un árbol de proyectos a la izquierda y una zona de código a la derecha. - Configuración regional clara. VBA usa el punto y coma como separador dentro de su propio código, independientemente de si tu Windows está en español, inglés o alemán. Los argumentos
Filename,QualityeIgnorePrintAreasse separan con coma dentro del código VBA; si copias una macro que uses coma y tu Windows tiene punto y coma, no pasa nada porque VBA ignora la configuración regional.
El editor de VBA y el módulo donde se pega la macro
Pulsa Alt+F11 y se abre Microsoft Visual Basic for Applications. A la izquierda ves el Explorador de proyectos, con un nodo por cada libro abierto. Dentro hay una carpeta "Microsoft Excel Objetos" con una entrada por hoja (Hoja1, Hoja2, Hoja3) y otra para "ThisWorkbook" (el libro entero). Para que la macro esté disponible en todas las hojas se mete en un módulo, no dentro del código de una hoja.
Para crear el módulo se usa el menú Insertar > Módulo. Aparece una carpeta "Módulos" en el árbol y dentro, "Módulo1": esa es la zona en blanco donde se pega la macro. La ventana de código tiene arriba dos listas desplegables: la izquierda elige el objeto y la derecha el evento; para una macro normal déjalas en "(General)".
Modulos > Modulo1 (Codigo)
El método ExportAsFixedFormat y sus argumentos
Este es el método que convierte la hoja a PDF. Sus argumentos principales son:
| Argumento | Qué hace | Valores típicos |
|---|---|---|
Type |
Tipo de archivo fijo que se crea | xlTypePDF para PDF; xlTypeXPS para XPS |
Filename |
Ruta y nombre del archivo, con extensión .pdf | "C:\\Informes\\Ventas.pdf" |
Quality |
Calidad del PDF | xlQualityStandard (estándar) o xlQualityMinimum |
IncludeDocProperties |
Incluye autor, título y asunto del libro | True o False |
IgnorePrintAreas |
Si es True, exporta toda la hoja aunque tengas un área de impresión marcada |
True o False |
OpenAfterPublish |
Abre el PDF en el visor justo después de crearlo | True o False |
xlTypePDF es una constante de VBA: el editor la entiende sin más, no hay que poner número. Si la ruta de Filename incluye carpetas que no existen, VBA devuelve un error 1004 en cuanto se ejecuta.
Una macro sencilla que guarda la hoja activa como PDF
Empezamos con la hoja Ventas del ejemplo, ya rellenada con los datos de la semana. La macro guardará esa hoja sola, no el libro entero, y la dejará abierta para revisarla.
| A | B | C | D | E | |
|---|---|---|---|---|---|
| 1 | Cliente | Producto | Importe | Fecha | |
| 2 | Libreria Centro | Cuaderno A4 | 45,00 | 03/10/2026 | |
| 3 | Papeleria Norte | Boligrafo azul | 12,50 | 03/10/2026 | |
| 4 | Oficina Sur | Carpeta anillas | 28,00 | 04/10/2026 | |
| 5 | Tienda Mayorista | Pack folios | 96,00 | 04/10/2026 | |
| 6 | Imprenta Veloz | Tinta impresora | 34,90 | 05/10/2026 | |
| 7 | Libreria Centro | Pegamento barra | 6,75 | 06/10/2026 | |
| 8 | Papeleria Norte | Cuaderno A5 | 18,40 | 06/10/2026 |
- Abre el archivo
ventas_trimestre.xlsmy, si todavía no tienes la pestaña Programador, actívala en Archivo > Opciones > Personalizar cinta de opciones. - Pulsa Alt+F11 para abrir el editor de VBA.
- En el menú Insertar > Módulo, pega el código siguiente:
Sub GuardarComoPDF()
Dim ruta As String
ruta = ThisWorkbook.Path & "\Ventas_" & Format(Date, "yyyy-mm-dd") & ".pdf"
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ruta, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
MsgBox "PDF guardado en: " & ruta
End Sub
- Coloca el cursor en cualquier línea entre
SubyEnd Suby pulsa F5 (Ejecutar). Verás un mensaje con la ruta del archivo y el PDF se abrirá solo. - Cierra el mensaje y vuelve a Excel. Para futuras ejecuciones puedes pulsar Alt+F8, elegir "GuardarComoPDF" y darle a Ejecutar, sin abrir el editor.
Ventas_2026-10-06.pdf. Si lo abres, verás la hoja Ventas (solo la hoja, no el libro entero) con A1:D8.ThisWorkbook.Path devuelve la carpeta del archivo. Si el libro nunca se guardó (es nuevo en memoria), la ruta está vacía y la macro falla: la primera ejecución debe ser después de haber guardado el .xlsm con Ctrl+G.Una macro con botón en la hoja para no abrir el editor
La macro del paso anterior funciona, pero cada semana hay que pulsar Alt+F8 y buscarla en la lista. Un botón directamente en la hoja es más rápido: un clic y listo. La pestaña Programador trae un grupo de controles para esto.
| A | B | C | D | |
|---|---|---|---|---|
| 1 | Cliente | Producto | Importe | Fecha |
| 2 | Libreria Centro | Cuaderno A4 | 45,00 | 03/10/2026 |
| 3 | Papeleria Norte | Boligrafo azul | 12,50 | 03/10/2026 |
| 4 | Oficina Sur | Carpeta anillas | 28,00 | 04/10/2026 |
| 5 | Tienda Mayorista | Pack folios | 96,00 | 04/10/2026 |
| 6 | Imprenta Veloz | Tinta impresora | 34,90 | 05/10/2026 |
| 7 | Libreria Centro | Pegamento barra | 6,75 | 06/10/2026 |
| 8 | Papeleria Norte | Cuaderno A5 | 18,40 | 06/10/2026 |
| 9 | ||||
| 10 | Guardar como PDF |
- Ve a Programador > Controles > Insertar y, dentro de "Controles de formulario", elige el primero: "Botón".
- Dibuja el botón en la celda B10 con un par de clics y suelta. Aparece el cuadro "Asignar macro".
- Elige "GuardarComoPDF" en la lista y pulsa Aceptar. Ya tienes el botón enganchado a la macro.
- Cierra el editor si lo tienes abierto. Pulsa el botón: el PDF se crea en la carpeta del libro y se abre solo.
' Este es el código del evento Click del botón,
' VBA lo mete dentro de la hoja, no en el módulo:
Private Sub btnGuardar_Click()
Dim ruta As String
ruta = ThisWorkbook.Path & "\Ventas_" & Format(Date, "yyyy-mm-dd") & ".pdf"
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ruta, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End Sub
Cómo elegir la carpeta y el nombre del PDF al ejecutar
La macro del botón siempre guarda en la misma carpeta y con el mismo nombre. Para que cada viernes elijas dónde y cómo llamarlo, hay que usar GetSaveAsFilename, una función de VBA que abre el cuadro "Guardar como" típico de Windows y devuelve la ruta que el usuario eligió (o False si cancela).
Sub GuardarComoPDFDialogo()
Dim ruta As Variant
ruta = Application.GetSaveAsFilename( _
InitialFileName:="Ventas_" & Format(Date, "yyyy-mm-dd"), _
FileFilter:="PDF Files (*.pdf), *.pdf", _
Title:="Save as PDF")
If ruta = False Then Exit Sub
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ruta, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=True
End Sub
Application.GetSaveAsFilename no exporta nada, solo pregunta. Si el lector pulsa Cancelar, devuelve False (no es una cadena, es un valor booleano), por eso ruta se declara como Variant. La variable ruta lleva el nombre y la carpeta exactos que el usuario eligió, y se la pasamos a ExportAsFixedFormat. La macro siguiente pregunta la primera vez de cada ejecución, así sirve para mandar distintos informes sin tocar el código.
Por qué la macro deja de funcionar o no llega a ejecutarse
Las macros que exportan a PDF fallan por tres causas casi siempre: el archivo se guardó mal, el libro de Excel vino de fuera y Excel bloquea las macros por seguridad, o VBA crea una copia temporal del PDF que se queda en una carpeta rara. Hay un cuarto caso poco habitual: la versión de Excel no trae la función ExportAsFixedFormat (en Excel 2007 funciona, pero hay Service Pack mínimos); en ese caso lo que se ve es un error 1004 con el texto "El método ExportAsFixedFormat ha fallado".
Guardar el archivo como .xlsm para que conserve la macro
Si después de crear la macro cierras el libro y Excel te pregunta "Guardar cambios en *.xlsx?", le has dado a Guardar sin pensarlo: has convertido el archivo en uno sin macros y la macro ha desaparecido. La próxima vez, Alt+F8 mostrará una lista vacía.
- Pulsa F12 para abrir Guardar como.
- En el campo "Tipo", elige "Libro de Excel habilitado para macros (*.xlsm)".
- Escribe el nombre (por ejemplo,
ventas_trimestre.xlsm) y pulsa Guardar. - Si ya tenías un .xlsx con el mismo nombre, confirma "Usar el formato xlsm".
Desbloquear las macros cuando Excel las bloquea
Un archivo descargado de internet, recibido por correo o copiado desde una memoria USB queda en una zona "protegida" y Excel muestra el aviso "Las macros se han deshabilitado" debajo de la cinta. Pulsar el botón no hace nada y Alt+F8 no ve la macro.
- En el Explorador de Windows, clic derecho sobre el .xlsm > Propiedades.
- En la pestaña "General", marca "Desbloquear" y acepta.
- Abre el archivo en Excel. Si sale la barra amarilla, pulsa "Habilitar contenido" > "Habilitar todas las macros de este archivo".
La copia local del PDF que aparece aunque solo quieras abrirlo
Cuando pones OpenAfterPublish:=True y el PDF se abre, Excel deja una copia temporal en C:\Users\<usuario>\AppData\Local\Temp\ por seguridad. Algunos antivirus bloquean ese temporal y "abrir el PDF" se queda colgado. Si solo quieres generar y enviar por correo sin abrir, la solución es poner OpenAfterPublish:=False. Si aun así quieres verlo, abre el PDF directamente desde la carpeta Temp (escribe %TEMP% en Ejecutar de Windows).
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=ruta, _
Quality:=xlQualityStandard, _
OpenAfterPublish:=False
OpenAfterPublish:=False el archivo se crea en la ruta indicada y el visor ya no se abre. Si quieres comprobar visualmente que está bien hecho, ábrelo desde la carpeta manualmente.Lo que ya sabes hacer con la macro para guardar PDF y el siguiente paso
- Guardar la hoja activa como PDF con un Sub de VBA en un módulo, llamado con F5 o Alt+F8.
- Asignar ese Sub a un botón de la pestaña Programador para ejecutarlo con un clic desde la propia hoja.
- Dejar que el usuario elija carpeta y nombre con
Application.GetSaveAsFilenamey cancele sin exportar si se arrepiente. - Resolver los tres cortes típicos: archivo .xlsx que tira la macro, macros bloqueadas por seguridad y
OpenAfterPublish:=Trueque se queda colgado por el antivirus.
El siguiente paso lógico es mandar ese PDF por correo sin abrir Outlook a mano. VBA lo consigue con Outlook.Application y MailItem.Attachments.Add; en el siguiente tutorial se cierra el círculo: misma hoja Ventas, mismo botón, ahora exportando y adjuntando al destinatario en una sola operación.
Datos comprobados en octubre de 2026.
Dudas al guardar una hoja de Excel como PDF con macro
1. Cómo crear una macro que guarde un Excel en PDF usando el valor de una celda como nombre del archivo
En el Editor de VBA (Alt+F11), crea un módulo y usa ExportAsFixedFormat con la ruta fija más el contenido de la celda, por ejemplo Range("A1").Value. Así cada PDF se nombra según lo que esa celda tenga escrito en ese momento, sin tener que cambiar el nombre a mano.
2. Cómo hacer una macro que imprima directamente un Excel a PDF
La macro más corta usa ActiveSheet.ExportAsFixedFormat xlTypePDF, "C:\Carpeta\archivo.pdf". Solo tienes que cambiar la carpeta de destino; el archivo se crea y se abre solo en tu visor de PDF, sin pasar por el cuadro de impresión.
3. Macro para exportar varias hojas de un libro a un único PDF
Selecciona el rango continuo que quieres imprimir (Sheets(Array(…)).Select) y ejecuta ExportAsFixedFormat xlTypePDF una sola vez. Excel manda al PDF las hojas en el orden en que aparecen en la matriz, todas dentro del mismo archivo.
4. Se puede usar Guardar como PDF desde una macro sin pulsar el menú
Sí: el método ExportAsFixedFormat del objeto Worksheet hace lo mismo que Archivo > Guardar como > PDF, pero sin abrir ningún cuadro de diálogo. Es el camino más limpio para automatizar exportaciones desde un botón o un evento.
5. Cuál es la forma más rápida de guardar un Excel en PDF
Pulsa F12 y en el tipo de archivo elige PDF; o, sin salir del libro, ve a Archivo > Guardar como y escoge PDF en la lista de tipos. Sin macros, el archivo se guarda con la extensión .pdf en la carpeta que elijas.
6. Cómo guardar en PDF solo lo que tengo seleccionado en Excel
Selecciona el rango en la hoja, ve a Archivo > Guardar como y elige PDF; en el siguiente paso marca Selección y pulsa Publicar. Con macros, el método es ExportAsFixedFormat aplicado al Range en lugar de a la hoja completa.
7. Se puede convertir un PDF a Excel desde una macro
No de forma directa: Excel no trae un motor para leer PDFs desde VBA. Tienes que abrirlo a mano en el Editor de Power Query (Datos > Obtener datos > De archivo > Desde PDF) o usar una herramienta externa que devuelva un libro de Excel.
8. Cómo guardar un cuadro o tabla de Excel como imagen PDF
En la pestaña Insertar, elige Formas y dibújalo sobre el cuadro; después cópialo con Ctrl+C y pégalo en Power Point o Word, desde donde lo exportas a PDF. Si quieres que el PDF quede clavado, desde la hoja usa Imprimir área y marca solo ese rango antes de guardar como PDF.
Fuentes
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 12/10/2026
- MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 12/10/2026
- MicrosoftFormatos de archivo de Excel — documentación oficialconsultado el 12/10/2026