PDF

Guardar un Excel como PDF con VBA: macro paso a paso

octubre 15, 2026 Tuto Excel 14 min read
Guardar un Excel como PDF con VBA: macro paso a paso

Imagina que cada lunes tienes que mandar a tu equipo el informe de ventas del mes en PDF. Si lo haces a mano —Archivo > Guardar como, elegir PDF, la carpeta, el nombre— son cinco clics por hoja y siempre se te olvida una. Con VBA automatizas esa rutina: una vez escrita, la lanzas con un atajo y Excel solo guarda el PDF, lo nombra con la fecha o el nombre del cliente y, si quieres, lo abre en tu visor. Este tutorial te lleva, paso a paso, desde abrir el editor de VBA hasta crear un PDF por alumno con un bucle, abrirlo con un comando del sistema y arreglar los cuatro errores que de verdad pasan al guardar. Funciona en Excel 2007 y posterior, también en Excel para la web y en Mac; la grabadora de macros y ExportAsFixedFormat están disponibles en todas esas versiones.

Qué es el PDF en Excel y por qué aprender a manejarlo con VBA

Un PDF es un archivo de imagen fija: lo que ves en pantalla queda tal cual en el documento, sin que dependa del Excel o la impresora de quien lo abra. Por eso es el formato ideal para distribuir una hoja de cálculo terminada (un informe, un presupuesto, un boletín de notas) sin que nadie toque tus fórmulas ni rompa un dato. El caso típico es el informe mensual que tu equipo espera cada lunes: lo abres, exportas a PDF, lo subes a la carpeta compartida y te vas a desayunar.

Con VBA el "exportar a PDF" deja de ser un trámite manual. En lugar de hacer clic en cada hoja, escribes una macro que recorre el libro, llama al método ExportAsFixedFormat y genera el archivo por ti. Cuando lo dominas, ese mismo esquema sirve para enviar un PDF por correo, archivarlo con la fecha en el nombre o imprimir varios informes en lote. La curva de aprendizaje es corta: el editor de VBA, una propiedad de fórmula, un bucle For y el cuadro de diálogo GetSaveAsFilename cubren el 90% de lo que harás en el día a día.

El editor de VBA y la grabadora de macros

VBA (Visual Basic for Applications) es el lenguaje de programación que llevan todas las aplicaciones de Office desde los años noventa. Dentro de Excel, VBA puede leer y escribir celdas, mover hojas, abrir archivos, enviar correos y, como verás aquí, generar PDFs. Todo el código VBA de un libro vive en módulos: pequeñas ventanas de texto donde escribes las instrucciones que Excel ejecutará cuando llames a la macro.

La forma más rápida de aprender VBA no es leer manuales: es usar la grabadora de macros (Programador > Grabar macro). Pulsas Grabar, haces la acción a mano (por ejemplo, exportar una hoja a PDF) y Excel traduce cada clic a su instrucción VBA. Al parar la grabación tienes el código hecho y solo te queda leerlo, entenderlo y adaptarlo.

Activar la pestaña Programador

La pestaña Programador viene oculta por defecto. Para mostrarla:

  1. Clic en Archivo > Opciones > Personalizar cinta de opciones.
  2. En la columna derecha "Pestañas principales" busca Programador y marca su casilla.
  3. Pulsa Aceptar. La pestaña aparece a la derecha de Vista.
ArchivoOpcionesPersonalizar cinta de opciones

Abrir el editor con Alt+F11 y crear un módulo

Pulsa Alt+F11 y se abre la ventana del editor de Visual Basic: a la izquierda, el árbol de proyectos con tus libros; a la derecha, la zona en blanco donde escribirás el código. Para añadir un módulo:

  1. En el menú del editor, Insertar > Módulo.
  2. Aparece una página en blanco con las palabras Option Explicit arriba (a veces) y debajo dos líneas: Sub NombreDeLaMacro() y End Sub.

Sub Saludo()
    Range("A1").Value = "Hola"
    MsgBox "Listo"
End Sub

Todo lo que va entre Sub y End Sub se ejecuta cuando lanzas la macro (Alt+F8 desde Excel, eliges el nombre y Ejecutar).

La grabadora de macros y el código que escribe

Con Programador > Grabar macro, nombre corto y Aceptar, Excel empieza a traducir lo que haces. Ve a Archivo > Guardar como > PDF, elige la carpeta y guarda. Pulsa Detener grabación en la misma pestaña Programador. Vuelve al editor (Alt+F11), abre el módulo que creó la grabadora y verás algo como:

Sub ExportarPDF()
    ActiveSheet.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        FileName:="C:\Informes\Enero.pdf", _
        Quality:=xlQualityStandard
End Sub

Esa línea ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF … es la misma que usaremos en todo el tutorial. La grabadora es tu diccionario: te dice cómo se llama cada cosa en VBA.

Las cuatro propiedades de fórmula de Range

Range es un objeto que representa una celda o un grupo de celdas. Tiene cuatro propiedades para leer o escribir la fórmula que contiene:

Propiedad Estilo de referencia Idioma de las funciones Separador
Formula A1 Inglés (SUM, VLOOKUP) Coma
FormulaR1C1 R1C1 (fila/columna) Inglés Coma
FormulaLocal A1 Español del usuario (SUMA, BUSCARV) Punto y coma
FormulaR1C1Local R1C1 Español del usuario Punto y coma

La regla de oro: si el código VBA lo escribes tú y quieres que funcione en un Excel en español, usa FormulaLocal; si lo copias de una página en inglés o quieres que funcione en cualquier idioma, usa Formula.

Formula en inglés con comas frente a FormulaLocal en español con punto y coma

Range("D2").Formula = "=SUM(A2:B2)"
Range("D2").FormulaLocal = "=SUMA(A2:B2)"
Nota: en Excel configurado con punto decimal (México, Estados Unidos) el separador de argumentos es la coma: =SUM(A2,B2) y =SUMA(A2,B2).

FormulaR1C1: referencias por fila y columna

R1C1 describe la celda por la distancia a la celda actual: R[-2]C[1] significa "dos filas arriba y una columna a la derecha". Es perfecto para escribir la misma fórmula en un rango arrastrando con un bucle.

Sub PonerFormula()
    Range("D2").FormulaR1C1 = "=R[-2]C[1]"
End Sub

En D3 la fórmula aparece como =B2 (porque apunta a la celda dos filas arriba y una columna a la derecha de D3).

Exportar una hoja de Excel a PDF desde VBA

El libro que usaremos se llama Informes.xlsx y tiene una hoja llamada Enero con las ventas del mes. Empezamos exportando esa hoja tal cual.

El método ExportAsFixedFormat y sus argumentos

ExportAsFixedFormat convierte una hoja, un rango o una selección a PDF (también a XPS) sin abrir el cuadro "Guardar como". La sintaxis es:

Argumento Qué hace Valores
Type Tipo de archivo xlTypePDF o xlTypeXPS
FileName Ruta completa del PDF Cadena de texto
Quality Calidad del PDF xlQualityStandard (imagen) o xlQualityMinimum (texto seleccionable)
IncludeDocProperties Si se incluyen las propiedades True o False
OpenAfterPublish Abre el PDF al terminar True o False
IgnorePrintAreas Ignora las áreas definidas True o False

Sub ExportarEnero()
    Worksheets("Enero").ExportAsFixedFormat _
        Type:=xlTypePDF, _
        FileName:=ThisWorkbook.Path & "\Enero.pdf", _
        Quality:=xlQualityStandard, _
        OpenAfterPublish:=True
End Sub

ThisWorkbook.Path devuelve la carpeta donde está guardado el libro, así que el PDF se crea al lado del .xlsx sin tener que escribir la ruta a mano.

Exportar varias hojas en un solo PDF

Para meter dos o más hojas en el mismo archivo se pasa un Array con sus nombres. El PDF lleva tantas páginas como hojas, en el orden del array.

Sub ExportarDosMeses()
    Worksheets(Array("Enero", "Febrero")).ExportAsFixedFormat _
        Type:=xlTypePDF, _
        FileName:=ThisWorkbook.Path & "\Enero-Febrero.pdf"
End Sub

C:\Informes\Enero-Febrero.pdf  (7 páginas: las 3 de Enero + las 4 de Febrero)

Si en lugar de Worksheets(Array(...)) usas Selection, solo entra en el PDF lo que el usuario tenga seleccionado con el ratón: útil para exportar un rango concreto.

Para que el usuario decida dónde guardar, usa Application.GetSaveAsFilename, que abre el mismo cuadro que Archivo > Guardar como y devuelve la ruta elegida (o False si cancela).

Sub ExportarConDialogo()
    Dim ruta As Variant
    ruta = Application.GetSaveAsFilename( _
        InitialFileName:="Informe", _
        FileFilter:="PDF (*.pdf), *.pdf")
    If ruta <> False Then
        Worksheets("Enero").ExportAsFixedFormat _
            Type:=xlTypePDF, FileName:=CStr(ruta)
    End If
End Sub

Crear un PDF desde cero con un bucle en VBA

Ahora subimos el listón: el libro Notas.xlsx tiene la hoja Alumnos con los nombres y las notas del trimestre. La macro generará un PDF por alumno.

A1fx**Alumno**
A B C D
1 Alumno Nota1 Nota2 Promedio
2 Ana 7,5 8,0 7,75
3 Bruno 4,0 5,5 4,75
4 Carla 9,0 9,5 9,25
5 David 6,0 7,0 6,50
Alumnos

Recorrer filas con Cells(fila, columna)

Cells(fila, columna) toma la fila y la columna como números: Cells(2, 1) es A2, Cells(5, 3) es C5. Combinado con un For, recorre el rango.

Sub RecorrerAlumnos()
    Dim i As Long
    For i = 2 To 5
        Cells(i, 4).Value = (Cells(i, 2).Value + Cells(i, 3).Value) / 2
    Next i
End Sub

Escribir la fórmula en la hoja temporal con FormulaLocal

Para el PDF, en lugar de calcular a mano, mejor escribir =PROMEDIO(B2:C2) con FormulaLocal. La fórmula queda en la celda y se evalúa sola al abrir el PDF.

Sub PonerPromedio()
    Range("D2:D5").FormulaLocal = "=PROMEDIO(B2:C2)"
End Sub

=PROMEDIO(B2:C2)

Nombrar el PDF con el nombre del alumno

La macro completa crea una hoja temporal, copia la fila del alumno, le añade el promedio y la exporta con el nombre del alumno:

Sub PDFporAlumno()
    Dim i As Long
    Dim wsTemp As Worksheet
    Set wsTemp = Worksheets.Add
    wsTemp.Name = "Temporal"
    Worksheets("Alumnos").Rows(1).Copy wsTemp.Rows(1)

    For i = 2 To 5
        Worksheets("Alumnos").Rows(i).Copy wsTemp.Rows(2)
        wsTemp.Range("D2").FormulaLocal = "=PROMEDIO(B2:C2)"

        wsTemp.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            FileName:=ThisWorkbook.Path & "\" & Cells(i, 1).Value & ".pdf"
    Next i

    Application.DisplayAlerts = False
    wsTemp.Delete
    Application.DisplayAlerts = True
End Sub
Comprueba: tras ejecutar, en la carpeta del libro aparecen Ana.pdf, Bruno.pdf, Carla.pdf y David.pdf, cada uno con el nombre y las dos notas del alumno.

Abrir un PDF desde Excel con VBA y los comandos de Shell

Una vez creado el PDF, lo natural es abrirlo en el visor del sistema para revisarlo.

Shell ejecuta un programa del sistema; ShellExecute (de la librería Shell32) abre cualquier archivo con su programa asociado (Acrobat para un PDF, el navegador para un HTML).

Sub AbrirPDF()
    CreateObject("Shell.Application").ShellExecute _
        ThisWorkbook.Path & "\Ana.pdf"
End Sub

Shell "ruta", vbNormalFocus se usa cuando quieres lanzar un programa concreto (Shell "notepad.exe", vbNormalFocus); ShellExecute es mejor para abrir un archivo con su programa asociado.

Comprobar que el PDF existe antes de abrirlo

Dir(ruta) devuelve la cadena vacía "" si el archivo no existe. Comprobarlo evita el error 53 ("Archivo no encontrado").

Sub AbrirSiExiste()
    Dim ruta As String
    ruta = ThisWorkbook.Path & "\Ana.pdf"
    If Dir(ruta) <> "" Then
        CreateObject("Shell.Application").ShellExecute ruta
    Else
        MsgBox "El PDF no existe todavía."
    End If
End Sub

(ruta) -> "C:\Informes\Ana.pdf"  si existe
(ruta) -> ""                      si no existe

Los errores que de verdad pasan al guardar PDF con VBA

"Se ha producido el error '1004' en tiempo de ejecución" al usar .Formula

La fórmula se asignó en español o con punto y coma en .Formula, que solo entiende inglés con comas. La macro peta en cuanto llega a esa línea.

Range("D2").Formula = "=SUMA(A2:B2)"   ' ← peta con error 1004

Solución: traducir la función o cambiar a FormulaLocal.

=SUM(A2:B2)

El PDF sale en blanco o con la hoja equivocada

La hoja activa no era la que querías exportar, o el rango seleccionado estaba vacío. La macro no avisa: el PDF se crea igual pero sin datos.

Worksheets("Enero").Select                       ' 1. selecciona la hoja
Worksheets("Enero").Range("A1:D20").ExportAsFixedFormat _
    Type:=xlTypePDF, FileName:=ThisWorkbook.Path & "\Enero.pdf"

"El archivo está abierto por otro usuario" al guardar

El PDF ya está abierto en Acrobat o en otra pestaña. Excel no puede escribir encima. La solución más limpia: cerrar el visor antes de ejecutar la macro, o generar el nombre con sello de hora:

FileName:=ThisWorkbook.Path & "\Enero_" & Format(Now, "yyyymmdd_hhnnss") & ".pdf"

Las macros no se guardan al cerrar el libro

Guardaste el archivo como .xlsx y Excel te avisó de que iba a perder las macros. La próxima vez que abras el libro, los módulos están vacíos.

  1. Archivo > Guardar como.
  2. En "Tipo" elige *Libro de Excel habilitado para macros (.xlsm)**.
  3. Guardar.
Cuidado: si ya guardaste como .xlsx y se borraron las macros, no se pueden recuperar con gusto: toca volver a escribirlas.

Lo que VBA no puede hacer con un PDF

VBA es muy potente con Excel, pero con PDFs se queda corto: no abre un PDF ya hecho para leer su texto, buscar palabras, rellenar campos ni cambiar una página. El modelo de objetos de Excel (el árbol de Workbook, Worksheet, Range…) entiende libros, hojas y celdas, no PDFs.

Si necesitas eso, las opciones son:

  • Power Query (Datos > Obtener datos > De un archivo > De PDF) puede leer tablas dentro de un PDF y traerlas a una hoja. Desde Excel 2016.
  • Bibliotecas externas como las que se usan en otros lenguajes: con VBA puro no son cómodas, pero existen soluciones que llaman a utilidades externas.
  • Acrobat Pro o Adobe Acrobat Reader con su plugin de automatización: permiten extraer texto y datos, pero es otra herramienta, no VBA.
Nota: si tu verdadero problema es leer un PDF, repasa el tutorial de Power Query antes de complicarte con VBA.

Lo que ya sabes hacer con VBA y los PDF en Excel

  • Abrir el editor con Alt+F11, crear un módulo y lanzar una macro con Alt+F8.
  • Usar la grabadora para descubrir cómo se llama en VBA cada acción que haces a mano.
  • Escribir fórmulas con FormulaLocal (español, punto y coma) y FormulaR1C1 (para bucles).
  • Exportar una hoja, varias hojas o un rango a PDF con ExportAsFixedFormat Type:=xlTypePDF.
  • Crear un PDF por alumno recorriendo filas con For…Next y Cells(fila, columna).
  • Abrir el PDF con ShellExecute tras comprobar que existe con Dir().

El siguiente paso natural: combinar el bucle que ya tienes con Outlook.Application para enviar cada PDF como adjunto al alumno correspondiente, en lugar de dejarlo solo en la carpeta.

Dudas al usar VBA para guardar y abrir PDF en Excel

Dudas al enviar un PDF por correo desde VBA

[other queries]

[other queries]

Dudas al usar VBA para guardar y abrir PDF en Excel

1. ¿Dónde encuentro la documentación oficial de VBA en Excel?

La documentación oficial está en learn.microsoft.com, dentro de la sección Office VBA. Ahí encuentras la referencia completa del modelo de objetos de Excel, con la sintaxis, los argumentos y ejemplos de cada propiedad y método que puedes usar en tus macros.

2. ¿Hay alguna forma sencilla de empezar con VBA en Excel si no tengo experiencia?

Sí, empezando por grabar una macro con Vista > Macros > Grabar macro y luego abrir el editor (Alt+F11) para ver el código que se generó. Eso te permite ver cómo Excel traduce tus acciones a instrucciones VBA y modificar pequeñas partes hasta entender cómo funciona.

3. ¿Qué son exactamente las macros en Excel?

Una macro es un conjunto de instrucciones que Excel ejecuta de forma automática al pedírselo, normalmente escritas en VBA. Sirve para repetir tareas con un solo clic, como aplicar un formato, copiar datos o, en este caso, guardar la hoja activa como PDF.

4. ¿Cómo consigo el archivo xlsm con macros para Excel?

No hace falta descargar nada: crea un libro nuevo en Excel y guárdalo con Archivo > Guardar como, eligiendo el tipo Libro de Excel habilitado para macros (*.xlsm). A partir de ahí, todo archivo con extensión .xlsm puede contener macros VBA listas para ejecutarse.

5. ¿Merece la pena hacer un curso de VBA?

Si vas a automatizar tareas en Excel de forma habitual, sí: un curso te enseña a leer el modelo de objetos, depurar errores y estructurar el código, que es lo que marca la diferencia entre copiar una macro y crear una que sirva de verdad. Microsoft Learn tiene rutas gratuitas en español que cubren desde lo básico hasta la automatización de informes.

6. ¿Existe un compilador para VBA?

No, VBA es un lenguaje interpretado que ejecuta el propio Excel al abrir la macro; no genera un archivo .exe ni necesita compilarse. Para distribuir el código se guarda el libro como .xlsm y se ejecuta desde el editor con F5 o con el botón asignado.

7. ¿Las macros de Excel funcionan en WPS Office?

WPS Office trae su propio entorno de macros basado en VBA, así que muchas macros de Excel se abren y se ejecutan sin cambios, aunque no todas las funciones del modelo de objetos de Microsoft están disponibles. La biblioteca oficial de soporte la mantiene WPS en su web, en el apartado de macros y scripts.

Fuentes

  1. MicrosoftGetting started with VBA in Office | Microsoft Learnconsultado el 06/10/2026
  2. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 06/10/2026
  3. MicrosoftLAMBDA — documentación oficialconsultado el 06/10/2026
  4. MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 06/10/2026
  5. MicrosoftAtajos que funcionan igual en cualquier idioma — documentación oficialconsultado el 06/10/2026