Necesita automatizar una combinación de correspondencia en Word sin tener que hacer clic en la cinta cada vez. Ejecutar una combinación de correspondencia desde una macro le permite generar cientos de cartas, correos electrónicos o etiquetas personalizadas con un solo comando. Este artículo explica cómo escribir y ejecutar una macro de VBA que realice una combinación de correspondencia completa de principio a fin. Aprenderá los objetos necesarios, la estructura del código paso a paso y cómo evitar errores comunes de automatización.
Puntos clave: Automatización de la combinación de correspondencia con macros de VBA
- Objeto MailMerge y MainDocumentType: Establezca el tipo de combinación en cartas, correos electrónicos o etiquetas antes de ejecutar la combinación.
- Método OpenDataSource: Dirija la macro a su archivo de origen de datos de Excel o Access utilizando la ruta completa del archivo.
- Método Execute: Realice la combinación en un nuevo documento, impresora o correo electrónico sin mostrar el asistente.
Qué hace el modelo de objetos de combinación de correspondencia en VBA de Word
VBA de Word expone la función de combinación de correspondencia a través del objeto MailMerge, que es un elemento secundario del objeto Document. Este objeto controla todos los aspectos de una combinación: el tipo de documento principal, el origen de datos, los campos de combinación y el destino de salida. Antes de escribir cualquier código, debe comprender tres elementos fundamentales.
El primer elemento es la propiedad MainDocumentType. Indica a Word qué tipo de combinación está realizando. Las opciones incluyen wdFormLetters, wdMailingLabels, wdEnvelopes, wdCatalog y wdEMail. Establecer esta propiedad correctamente garantiza que Word cree la estructura de salida correcta.
El segundo elemento es el origen de datos. El método OpenDataSource conecta el documento principal con un archivo externo. Este archivo puede ser un libro de Excel, una base de datos de Access, un archivo CSV o una carpeta de contactos de Outlook. Debe proporcionar la ruta completa al archivo. Si el origen de datos tiene varias hojas o tablas, también especifique el parámetro SQLStatement para seleccionar el rango correcto.
El tercer elemento es el método Execute. Este método ejecuta la combinación y envía la salida a uno de varios destinos: un nuevo documento (wdSendToNewDocument), la impresora (wdSendToPrinter) o correo electrónico (wdSendToEmail). También puede suprimir los mensajes estableciendo ShowWizard en False y SuppressBlankLines en True.
Requisitos previos para ejecutar una macro de combinación de correspondencia
Necesita un documento principal que ya contenga campos de combinación. La macro no inserta campos por usted. Abra el documento principal en Word e inserte los campos utilizando la cinta de opciones Correspondencia o escribiendo «FieldName» manualmente. El origen de datos debe ser accesible en la ruta de archivo que especifique en la macro. Si el origen de datos es un archivo de Excel, utilice un rango con nombre o una referencia de hoja como Sheet1$.
Habilite las macros en Word antes de ejecutar el código. Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de macros. Seleccione Habilitar todas las macros. Esta no es una configuración segura para entornos de producción, así que desactívela después de las pruebas.
Pasos para escribir y ejecutar una macro de combinación de correspondencia en Word
La siguiente macro realiza una combinación de correspondencia en un nuevo documento utilizando un origen de datos de Excel. Ajuste las rutas de archivo y los nombres de hoja para que coincidan con su entorno.
- Abra el Editor de VBA
Presione Alt+F11 en Word. Se abre el editor de Visual Basic para Aplicaciones. Si el Explorador de proyectos no está visible, presione Ctrl+R para mostrarlo. - Inserte un nuevo módulo
En el Explorador de proyectos, haga clic con el botón derecho en Normal o en el proyecto del documento actual. Elija Insertar > Módulo. Aparece una ventana de código en blanco. - Pegue el código de la macro
Copie y pegue el siguiente código en la ventana del módulo:Sub RunMailMergeToNewDoc() Dim mainDoc As Document Set mainDoc = ActiveDocument With mainDoc.MailMerge .MainDocumentType = wdFormLetters .OpenDataSource _ Name:="C:\Data\Customers.xlsx", _ SQLStatement:="SELECT FROM [Sheet1$]", _ SubType:=wdMergeSubTypeWord2000 .Destination = wdSendToNewDocument .SuppressBlankLines = True .Execute Pause:=False End With Set mainDoc = Nothing End SubReemplace
C:\Data\Customers.xlsxcon la ruta completa a su origen de datos. Reemplace[Sheet1$]con el nombre de hoja o rango con nombre correcto. - Ejecute la macro
Presione F5 mientras el cursor está dentro de la macro. Word se conecta al origen de datos, combina todos los registros y crea un nuevo documento que contiene las cartas combinadas. - Guarde el documento combinado
El nuevo documento no está guardado. Presione Ctrl+S para guardarlo con un nuevo nombre. El documento principal original permanece sin cambios.
Modificación de la macro para salida por correo electrónico o impresora
Para enviar la salida de la combinación directamente a la impresora, cambie la línea Destination a .Destination = wdSendToPrinter. Para enviar por correo electrónico, cámbiela a .Destination = wdSendToEmail y agregue las siguientes líneas antes de .Execute:
.MailSubject = "Your subject line here" .MailAddressFieldName = "Email"
El MailAddressFieldName debe coincidir con el nombre de la columna en su origen de datos que contiene las direcciones de correo electrónico.
Errores comunes de automatización y cómo solucionarlos
Word no puede encontrar el archivo de origen de datos
La macro falla con el error 5152 o un mensaje de que el archivo no se puede abrir. Esto ocurre cuando la ruta de archivo en el método OpenDataSource es incorrecta o el archivo está bloqueado por otro proceso. Verifique que la ruta exista y que el archivo no esté abierto en Excel. Utilice solo rutas absolutas. Evite rutas con espacios a menos que encierre toda la ruta entre comillas.
La combinación se ejecuta pero produce documentos en blanco
La salida en blanco generalmente significa que los campos de combinación en el documento principal no coinciden con los nombres de columna en el origen de datos. Verifique los nombres de los campos presionando Alt+F9 en el documento principal para revelar los códigos de campo. Por ejemplo, { MERGEFIELD FirstName } debe coincidir con una columna llamada FirstName en el origen de datos. Las mayúsculas y minúsculas no importan, pero la ortografía debe ser exacta.
La macro se detiene con un error de permisos
Word puede bloquear la macro si el documento está en una ubicación de confianza o si la seguridad de macros está configurada demasiado alta. Mueva el documento principal a una carpeta de confianza. Vaya a Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Ubicaciones de confianza. Agregue la carpeta que contiene su documento principal. Como alternativa, firme digitalmente la macro para ejecutarla sin reducir la seguridad.
Combinación de correspondencia manual vs. combinación de correspondencia controlada por macro
| Elemento | Combinación de correspondencia manual | Combinación de correspondencia controlada por macro |
|---|---|---|
| Tiempo de configuración | Requiere hacer clic en más de 5 pasos de la cinta de opciones | Un clic después de la configuración inicial de VBA |
| Repetibilidad | Debe repetir el asistente para cada nuevo conjunto de datos | La misma macro funciona para cualquier origen de datos |
| Manejo de errores | Word muestra cuadros de diálogo para datos faltantes | La macro se detiene o omite registros silenciosamente |
| Flexibilidad de salida | Elija el destino cada vez | El destino está codificado de forma rígida en la macro |
| Habilidad requerida | No se necesitan conocimientos de programación | Se necesitan conocimientos básicos de VBA |
La combinación de correspondencia manual funciona bien para uso ocasional. La combinación controlada por macro ahorra tiempo cuando se ejecuta la misma combinación semanal o diariamente. El enfoque de macro también le permite combinar varios pasos de combinación en un solo proceso automatizado, como generar cartas y luego guardar cada una como un PDF separado.
Ahora puede escribir una macro de VBA que abra un origen de datos, establezca el tipo de combinación y ejecute la combinación en un nuevo documento, impresora o correo electrónico. Pruebe la macro primero con un conjunto de datos pequeño para confirmar la asignación de campos. Para automatización avanzada, explore la colección MailMergeDataFields para verificar dinámicamente qué campos existen antes de ejecutar la combinación. Esto evita errores en tiempo de ejecución cuando cambia la estructura del origen de datos.