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:
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á.
1. Microsoft Word 16.0 Object Library
2. Microsoft Excel 16.0 Object Library
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.
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 |
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
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 |
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
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 |
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
.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.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
.docxconDocuments.Open, dejar Word invisible con.Visible = Falsey cerrarlo conappWord.Quitsin dejar procesos colgados. - Buscar y reemplazar texto con
Selection.FindoRange.Find, usandoReplace:=wdReplaceAllpara 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 bucleFor. - Dar formato a un párrafo con
Range.Font.Name,.Size,.BoldyParagraphFormat.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
- MicrosoftEl editor de VBA y la primera macro — documentación oficialconsultado el 12/10/2026
- MicrosoftLAMBDA — documentación oficialconsultado el 12/10/2026
- MicrosoftRange.Formula, FormulaLocal, FormulaR1C1 y FormulaR1C1Local — documentación oficialconsultado el 12/10/2026
- MicrosoftImportar un archivo de texto o CSV — documentación oficialconsultado el 12/10/2026
- MicrosoftPegar, Opciones de pegado y Pegado especial — documentación oficialconsultado el 12/10/2026