word

Macros VBA en Excel desde cero: tu primera macro explicada

octubre 28, 2026 Tuto Excel 15 min read
Macros VBA en Excel desde cero: tu primera macro explicada

Una macro de Word escrita con VBA (Visual Basic for Applications) y guardada en un libro de Excel te permite automatizar tareas repetitivas en documentos .docx sin tocar Word a mano. En este tutorial recorrerás el camino completo, desde abrir el editor de VBA hasta generar cartas personalizadas con datos de Excel, y sabrás manejar la pestaña Programador, las referencias a la biblioteca de Word y los errores más habituales al ejecutar la macro desde Excel.

Esta guía funciona con Excel 2010, 2013, 2016, 2019, 2021, 2024 y Microsoft 365, en Windows. En Mac, el editor VBA existe con pequeños cambios y el botón Alt+F11 se sustituye por Fn+F11 o Opt+F11 según la versión. Excel para la web no permite ejecutar macros VBA, así que el libro debe abrirse en Excel de escritorio.

Qué es una macro de Word con VBA y para qué se usa desde Excel

Una macro VBA es un bloque de instrucciones escritas en Visual Basic que automatiza tareas en Office. Cuando esa macro controla un programa distinto del que la ejecuta, se habla de automatizar Word desde Excel: un libro de Excel lanza una instancia de Word con CreateObject("Word.Application"), abre un documento y le aplica cambios que, hechos a mano, llevarían minutos.

El caso práctico que guía el tutorial es una cartelería semanal. Tienes un libro llamado Clientes.xlsx con ocho clientes en la hoja Clientes (columnas A:D: código, nombre, apellidos y ciudad) y una plantilla de carta en Carta.docx con la palabra «Cliente» como marcador. La macro recorre la hoja, copia cada nombre en la carta y guarda una copia por cliente. Al terminar, sabes abrir Word desde VBA, escribir dentro de un documento, buscar y reemplazar texto y dar formato sin salir de Excel.

No necesitas instalar nada extra: VBA viene dentro de Excel y la biblioteca de Word se añade como una referencia en el editor. Eso sí, el libro debe guardarse como .xlsm para conservar la macro; en .xlsx las macros se borran al guardar.

El editor de VBA y el primer Sub que escribe en Word

Antes de escribir código necesitas ver dónde se escribe y qué objetos mínimos reconocerás al leer una macro de Word. La herramienta es el Editor de Visual Basic, una ventana aparte con su propio menú, árbol de proyectos a la izquierda y panel de código a la derecha. Pulsa Alt+F11 con Excel abierto y se abre. Si lo pulsas con un documento de Word abierto, se abre la misma ventana pero cargando los proyectos de Word.

Dentro del editor, los objetos forman una jerarquía: Application es el propio Word (o Excel, según dónde pulses Alt+F11); debajo vive la colección Documents con cada Document abierto; dentro de un documento están los Range (trozos de texto con inicio y fin) y Selection (lo seleccionado en pantalla). Esos cuatro objetos —Application, Document, Range y Selection— son los que verás en casi cualquier macro que escribas para Word.

Activar la pestaña Programador y la referencia a la biblioteca de Word

Por defecto, la pestaña Programador está oculta. Para que aparezca:

ArchivoOpcionesPersonalizar cinta de opciones

En la columna de la derecha, marca la casilla Programador y pulsa Aceptar. La cinta ya muestra Programador con los grupos Código, Controles y XML, y desde ahí entras al editor con Alt+F11.

Una vez en el editor, el siguiente paso es indicarle que vas a usar objetos de Word. Sin esa marca, cada línea que escriba Word.Document se pintará en rojo y la macro no compilará.

Pulsa Aceptar y la referencia queda añadida al proyecto. Si no la encuentras en la lista, usa el botón Examinar y busca MSWORD.OLB en la carpeta de Office, aunque lo normal es que aparezca sola.

Crear el módulo y declarar las variables de Word

En el editor, selecciona VBAProject (Clientes.xlsx) en el árbol de la izquierda, ve a Insertar > Módulo y se crea un Módulo1 con su panel en blanco. Ahí escribirás tus Sub.

Sub PrimeraMacroWord()
    Dim appWord As Word.Application
    Dim doc As Word.Document

    Set appWord = New Word.Application
    appWord.Visible = False

    Set doc = appWord.Documents.Open(EsteWorkbook.Path & "\Carta.docx")

    doc.Range.Find.Text = "Cliente"
    doc.Range.Find.Replacement.Text = "María"
    doc.Range.Find.Execute Replace:=wdReplaceAll

    doc.SaveAs2 EsteWorkbook.Path & "\Carta_Maria.docx"
    doc.Close
    appWord.Quit

    Set doc = Nothing
    Set appWord = Nothing

    MsgBox "Carta generada en: " & EsteWorkbook.Path & "\Carta_Maria.docx"
End Sub

Declara appWord como Word.Application y doc como Word.Document. Esto se llama Early Binding: al escribir appWord., el editor te muestra la lista de métodos de Word y autocompleta.

Nota: Early Binding exige que la referencia esté marcada en todos los equipos que abran el libro. Si tu macro se va a ejecutar en otros PCs y no puedes garantizar que tengan la referencia añadida, usa Late Binding: declara todo como Object y crea Word con CreateObject("Word.Application"). Funciona en cualquier equipo sin tocar Referencias.

Abrir un documento de Word y escribir dentro desde VBA

Vamos a aplicar la macro al libro de clientes. Primero, los datos con los que vas a trabajar:

A B C D F
1 Codigo Nombre Apellidos Ciudad Plantilla
2 C001 Maria Lopez Madrid C:\Cartas\Carta.docx
3 C002 Javier Serrano Sevilla
4 C003 Laura Diaz Bilbao
5 C004 Andres Romero Zaragoza
6 C005 Carla Nuñez Valencia
7 C006 Pedro Vargas Murcia
8 C007 Sofia Castro Malaga
Clientes

La ruta a la plantilla vive en F1 para que la macro la lea de ahí. Ahora la macro que abre Carta.docx y sustituye la palabra «Cliente» por el nombre de la fila actual.

Abrir la plantilla con Documents.Open y dejarla visible u oculta

Sub GenerarCartas()
    Dim appWord As Word.Application
    Dim doc As Word.Document
    Dim rutaPlantilla As String
    Dim i As Long

    rutaPlantilla = Worksheets("Clientes").Range("F1").Value

    Set appWord = New Word.Application
    appWord.Visible = False

    Set doc = appWord.Documents.Open(rutaPlantilla)

    appWord.Quit
    Set doc = Nothing
    Set appWord = Nothing
End Sub
Nota: appWord.Visible = False lanza Word en segundo plano para que no parpadee la pantalla mientras la macro trabaja. Si quieres ver lo que ocurre en directo durante las pruebas, ponlo en True.

Buscar y reemplazar texto con Selection.Find

Abre el documento y aplica Find sobre Selection (que apunta a todo el contenido cuando aún no se ha seleccionado nada). Después de cada reemplazo conviene volver al inicio con HomeKey para que el siguiente Find siga desde el principio.

Sub ReemplazarCliente()
    Dim appWord As Word.Application
    Dim doc As Word.Document
    Dim nombre As String

    Set appWord = New Word.Application
    appWord.Visible = False
    Set doc = appWord.Documents.Open(Worksheets("Clientes").Range("F1").Value)

    nombre = Worksheets("Clientes").Range("B2").Value

    With appWord.Selection.Find
        .ClearFormatting
        .Text = "Cliente"
        .Replacement.ClearFormatting
        .Replacement.Text = nombre
        .Execute Replace:=wdReplaceAll
    End With

    doc.SaveAs2 Worksheets("Clientes").Range("F1").Value & "_Maria.docx"
    doc.Close
    appWord.Quit
    Set doc = Nothing
    Set appWord = Nothing
End Sub

Rellenar una tabla del documento con los datos de la hoja

La plantilla tiene una tabla de tres columnas al final con una fila de cabecera. La macro recorre las filas 2 a 8 de la hoja y vuelca cada cliente en una fila nueva de esa tabla.

A B C D F
1 Codigo Nombre Apellidos Ciudad Plantilla
2 C001 Maria Lopez Madrid C:\Cartas\Carta.docx
3 C002 Javier Serrano Sevilla
Clientes

Sub RellenarTabla()
    Dim appWord As Word.Application
    Dim doc As Word.Document
    Dim i As Long
    Dim fila As Long

    Set appWord = New Word.Application
    appWord.Visible = False
    Set doc = appWord.Documents.Open(Worksheets("Clientes").Range("F1").Value)

    fila = 2
    For i = 2 To 8
        Worksheets("Clientes").Cells(fila, 1).Value = i - 1
        doc.Tables(1).Cell(i - 1, 1).Range.Text = _
            Worksheets("Clientes").Cells(i, 1).Value
        doc.Tables(1).Cell(i - 1, 2).Range.Text = _
            Worksheets("Clientes").Cells(i, 2).Value & " " & _
            Worksheets("Clientes").Cells(i, 3).Value
        fila = fila + 1
    Next i

    doc.SaveAs2 Worksheets("Clientes").Range("F1").Value & "_con_tabla.docx"
    doc.Close
    appWord.Quit
    Set doc = Nothing
    Set appWord = Nothing
End Sub
Comprueba: al ejecutar esta macro (F5 desde el editor), Word abre la plantilla, rellena la primera tabla con los datos de Clientes y guarda el resultado como Carta_con_tabla.docx en la misma carpeta. Si abres ese .docx, la tabla tiene siete filas con código, nombre, apellidos y ciudad.

Dar formato a un párrafo o a un rango desde la macro

Una vez escrito el texto, lo habitual es aplicar formato: cambiar la fuente, subir el tamaño, poner el primer párrafo en negrita. Las propiedades de formato viven dentro de Range.Font, igual que en Excel se usa Range.Font.Bold.

A B C D
1 Codigo Nombre Apellidos Ciudad
2 C001 Maria Lopez Madrid
Clientes

Sub DarFormato()
    Dim appWord As Word.Application
    Dim doc As Word.Document
    Dim rng As Word.Range

    Set appWord = New Word.Application
    appWord.Visible = True
    Set doc = appWord.Documents.Open(Worksheets("Clientes").Range("F1").Value)

    Set rng = doc.Paragraphs(1).Range
    With rng.Font
        .Name = "Calibri"
        .Size = 14
        .Bold = True
        .Color = RGB(31, 73, 125)
    End With

    rng.ParagraphFormat.Alignment = wdAlignParagraphCenter

    appWord.Quit
    Set doc = Nothing
    Set appWord = Nothing
End Sub
Nota: como .Visible = True, Word se queda en pantalla y puedes ver el resultado en directo: la primera línea (el saludo) aparece en Calibri 14, negrita, azul corporativo y centrada. El resto del documento conserva el formato original.
Cuidado: aplicar formato con Selection o Range.Font sobre un documento abierto en Vista Protegida falla sin error visible. Cierra la vista protegida desde Word (Archivo > Información > Habilitar edición) antes de lanzar la macro.

Por qué la macro de Word falla al ejecutarla desde Excel

Las cuatro causas reales más frecuentes son: Word se cerró antes de tiempo, la referencia a la biblioteca está sin marcar, la plantilla está abierta en Word y algo bloquea la escritura, y el archivo .docx protegido con contraseña. Antes de tocar nada, mira cuál de los cuatro mensajes ha saltado.

Error 462 «El servidor remoto no existe o no está disponible»

Este error aparece cuando intentas usar appWord después de haber llamado a appWord.Quit. La instancia ya se cerró y VBA no encuentra el servidor. Suele pasar cuando se ejecuta dos veces la misma macro sin reiniciar Word entremedias.

Sub Error462Demo()
    Dim appWord As Word.Application
    Set appWord = New Word.Application
    appWord.Visible = False
    appWord.Documents.Add

    appWord.Quit
    Set appWord = Nothing

    MsgBox appWord.Name
End Sub

La línea final, MsgBox appWord.Name, lanza el error 462 porque appWord ya está cerrado. La regla es: una vez escrito appWord.Quit, no vuelvas a tocar appWord. Si necesitas reutilizar Word, crea una nueva instancia con New Word.Application o quita el Quit intermedio.

La referencia a Word está sin marcar y todo se pinta en rojo

Si abres el editor y todas las palabras que empiezan por Word. aparecen en rojo, significa que Microsoft Word xx.0 Object Library no está marcada.

Sub ErrorReferencia()
    Dim doc As Word.Document
    Set doc = Documents.Open("Carta.docx")
End Sub

Sin la referencia marcada, Word.Document no existe para VBA y la línea se compila en rojo. Tres formas de arreglarlo: marca la referencia como se ha explicado antes, sustituye Word.Document por Object y New Word.Application por CreateObject("Word.Application") (Late Binding), o añade el archivo MSWORD.OLB desde el botón Examinar del mismo cuadro.

La plantilla .docx está abierta y Word no la deja escribir

Si Carta.docx está abierta en una ventana de Word, Documents.Open la abre en modo solo lectura y cualquier intento de Range.Text = "..." lanza un error 4605 «No se puede obtener acceso al archivo». Esto pasa también si otro usuario tiene el archivo en red.

Sub ErrorPlantillaAbierta()
    Dim appWord As Word.Application
    Dim doc As Word.Document
    Set appWord = New Word.Application
    Set doc = appWord.Documents.Open(Worksheets("Clientes").Range("F1").Value)
    doc.Range.Text = "Sobrescrito"
    doc.Save
End Sub

La solución más limpia es trabajar con una copia temporal: copia Carta.docx a la carpeta temporal con FileSystemObject, abre la copia, modifica y luego guárdala en su destino final.

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")
fso.CopyFile rutaOrigen, rutaTemporal
Set doc = appWord.Documents.Open(rutaTemporal)

Lo que VBA de Word no puede hacer desde Excel y sus alternativas

VBA en Excel solo controla el Word de escritorio. No automatiza Word Online (el del navegador), la aplicación de Word para móvil ni los documentos abiertos desde OneDrive en versión web. Tampoco abre archivos .docx protegidos con contraseña sin esa contraseña: la propia Documents.Open rechaza el archivo y devuelve error 5405.

Además, VBA no sustituye a las funciones interactivas de Word cuando solo hay que rellenar campos fijos: la Combinación de correspondencia de Word (Correspondencia > Iniciar combinación de correspondencia) toma un origen de datos de Excel y rellena cartas, etiquetas o sobres sin escribir una sola línea de código, y se queda en Word. VBA gana cuando hay lógica (filtrar, condicionar, mover tablas) o cuando el proceso debe dispararse con un botón en la hoja.

Como referencia, la documentación oficial de Microsoft explica el modelo de objetos de Word en la biblioteca Office Developer, donde los métodos Documents.Open, Range.Find y Tables.Cell están detallados con sus parámetros.

Lo que ya sabes hacer con VBA de Word desde Excel

  • Abrir un documento .docx con Documents.Open, dejar Word invisible con .Visible = False y cerrarlo con appWord.Quit sin dejar procesos colgados.
  • Buscar y reemplazar texto con Selection.Find o Range.Find, usando Replace:=wdReplaceAll para cambiar todas las apariciones de golpe.
  • Escribir en tablas del documento con doc.Tables(1).Cell(fila, columna).Range.Text, recorriendo los datos de Excel con un bucle For.
  • Dar formato a un párrafo con Range.Font.Name, .Size, .Bold y ParagraphFormat.Alignment.

El siguiente paso natural es unir las cuatro piezas en una sola macro que recorra los ocho clientes, genere una carta por cada uno y guarde los .docx en una subcarpeta. Para eso basta con mover el SaveAs2 dentro del For y crear la carpeta con FileSystemObject.

Datos comprobados en octubre de 2026.

Dudas al usar macros de Word con VBA desde Excel

1. Ejemplos de VBA en Microsoft Word

Las macros VBA en Word sirven para automatizar tareas como reemplazar texto en muchos documentos, extraer datos de tablas o aplicar formatos con un clic. Se programan en el Editor de VBA (Alt+F11) dentro de plantillas o documentos. En el tutorial de tutoexcel.com verás ejemplos equivalentes aplicados a Excel, que es donde mejor se practican los conceptos básicos antes de llevarlos a Word.

2. Listado de códigos VBA más útiles

Hay varios códigos recurrentes que conviene memorizar: Range("A1").Value = "Hola" para escribir en una celda, Cells(fila, columna) para referirse a una celda con variables, y ActiveSheet.Name = "Hoja1" para renombrar hojas. También son básicos los bucles For Each…Next para recorrer rangos y la estructura If…Then…Else para tomar decisiones. El tutorial los va presentando uno a uno con ejemplos que puedes copiar y pegar en tu propio libro.

3. Cómo abrir el editor de VBA en Word

En Word, abre el editor con Alt+F11 (Option+F11 en Mac) o desde Vista > Macros > Ver macros. Ahí verás el panel Proyecto a la izquierda con tus documentos y plantillas, y la ventana de código a la derecha. Si la pestaña Programador no aparece, actívala en Archivo > Opciones > Personalizar cinta de opciones.

4. PDF de programación VBA en Microsoft Word

No hace falta un PDF externo para empezar: la guía oficial de Microsoft Learn sobre VBA en Office (learn.microsoft.com) incluye referencia completa de objetos, métodos y eventos de Word y Excel, con ejemplos descargables. En tutoexcel.com encontrarás los conceptos explicados paso a paso en español, con hojas de ejemplo listas para practicar.

5. Cómo cerrar un proyecto VBA en Word

Para cerrar el proyecto dentro del editor, ve a Archivo > Cerrar y volver a Microsoft Word, o pulsa Ctrl+W sobre la ventana del proyecto. Esto no elimina las macros: solo cierra el editor y vuelve al documento. Si quieres quitarlas, tendrás que eliminarlas desde el Explorador de proyectos dentro del propio editor.

6. Cómo habilitar macros en Word

Al abrir un archivo .docm con macros, Word muestra una barra de aviso amarilla con un botón Habilitar contenido; púlsalo para activarlas. Si tienes varios documentos, puedes confiar en su ubicación con Archivo > Opciones > Centro de confianza > Configuración > Ubicaciones de confianza. Activa las macros solo si confías plenamente en el origen del archivo.

7. Ejemplos de código VBA para Excel

Una macro sencilla que escribe Hola en A1 es: Sub Saludar() Range("A1").Value = "Hola" End Sub. Para recorrer las filas con datos hasta la última ocupada se usa Range("A1").End(xlDown).Row dentro de un bucle For i = 1 To ultimaFila. En el tutorial de tutoexcel.com encontrarás estos códigos explicados línea por línea, con lo que tienes que ver al ejecutarlos.

8. Documentación oficial de VBA en Excel

La referencia completa de objetos, propiedades y métodos de VBA para Excel está en learn.microsoft.com/es-es/office/vba/, con ejemplos descargables y buscador por objeto. Complementa esa referencia con la sección Macros del soporte oficial (support.microsoft.com/es-es), que incluye procedimientos paso a paso. En tutoexcel.com traducimos esos conceptos al lenguaje de quien está aprendiendo.

Fuentes

  1. MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 12/10/2026
  2. MicrosoftLAMBDA — documentación oficialconsultado el 12/10/2026
  3. MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 12/10/2026
  4. MicrosoftImportar un archivo de texto o CSV — documentación oficialconsultado el 12/10/2026
  5. MicrosoftPegar, Opciones de pegado y Pegado especial — documentación oficialconsultado el 12/10/2026