Necesita enviar correos personalizados con archivos adjuntos que varían para cada destinatario. La función estándar de combinación de correspondencia de Word envía el mismo documento a todos. No adjunta de forma nativa archivos separados por destinatario. Este artículo explica cómo usar una combinación de tipo Directory junto con una macro de VBA para adjuntar archivos únicos desde una carpeta a correos individuales de Outlook.
Puntos clave: Envío de correos personalizados con archivos adjuntos individuales
- Combinación de directorio de Word + macro de VBA de Outlook: Combina una combinación de tipo directorio que enumera todos los datos de los destinatarios con una macro que crea correos individuales y adjunta archivos según el valor de un campo.
- Origen de datos con una columna “AttachmentPath”: Cada fila de destinatario debe incluir la ruta completa del archivo adjunto único para que la macro sepa qué archivo adjuntar.
- La macro se ejecuta desde el documento combinado de Word: Después de que la combinación de directorio rellene una tabla de Word, una ejecución de la macro envía todos los correos y adjunta el archivo correcto para cada fila.
Por qué la combinación de correspondencia de Word no puede adjuntar archivos por destinatario de forma predeterminada
La combinación de correspondencia de Word tiene dos tipos principales de salida: Cartas y Mensajes de correo electrónico. La opción Mensajes de correo electrónico envía el documento combinado como cuerpo del correo o como archivo adjunto. Pero adjunta el mismo documento a cada correo. No hay un campo o regla integrado para adjuntar un archivo que cambie por destinatario.
La solución utiliza un tipo de combinación Directory. Una combinación de directorio no crea páginas o correos separados. Rellena una única tabla de Word con una fila por destinatario. Esa tabla luego es procesada por una macro de VBA que lee cada fila, crea un correo de Outlook y adjunta el archivo especificado en la fila.
Lo que necesita antes de comenzar
- Microsoft Outlook configurado con una cuenta de correo funcional
- Word 2019, Word 2021 o Word para Microsoft 365
- Un origen de datos como una hoja de cálculo de Excel o una tabla de Access con columnas para Nombre, Correo electrónico, Asunto y AttachmentPath
- Una carpeta en su equipo o red que contenga los archivos adjuntos nombrados exactamente como aparecen en la columna AttachmentPath
- Macros habilitadas en Word: Archivo > Opciones > Centro de confianza > Configuración del Centro de confianza > Configuración de macros > Habilitar todas las macros
Pasos para configurar el origen de datos y la combinación de directorio
- Prepare su origen de datos
En Excel, cree las columnas: FirstName, LastName, EmailAddress, SubjectLine, AttachmentPath. Rellene AttachmentPath con rutas completas de archivo como C:\Attachments\Invoice_123.pdf. Guarde y cierre el libro. - Abra un nuevo documento de Word en blanco
Vaya a Correspondencia > Iniciar combinación de correspondencia > Directorio. Esto indica a Word que cree una única tabla con todos los registros. - Seleccione los destinatarios
Haga clic en Seleccionar destinatarios > Usar una lista existente. Busque su archivo de Excel. En el cuadro de diálogo Seleccionar tabla, elija la hoja que contiene sus datos. Asegúrese de que la primera fila de la hoja contenga los encabezados de columna. - Inserte campos combinados en el documento
Inserte una tabla de Word con una fila y tantas columnas como necesite. En cada celda, haga clic en Correspondencia > Insertar campo combinado y elija el nombre de columna correspondiente. Incluya una celda para AttachmentPath aunque no aparecerá en el correo final. Este campo indica a la macro qué archivo adjuntar. - Complete la combinación
Haga clic en Correspondencia > Finalizar y combinar > Editar documentos individuales. En el cuadro de diálogo Combinar en documento nuevo, elija Todos. Word genera un nuevo documento con una fila de tabla por destinatario. Guarde este documento combinado como MergedOutput.docx.
Pasos para crear y ejecutar la macro de VBA
- Abra el Editor de Visual Basic
Presione Alt+F11 en Word. En el panel Proyecto, haga doble clic en Normal o en el proyecto del documento actual para abrir un módulo de código. - Inserte un nuevo módulo
Haga clic en Insertar > Módulo. Pegue el siguiente código de macro en el módulo:Sub SendMailWithAttachments() Dim objOutlook As Object Dim objMail As Object Dim objDoc As Document Dim objTable As Table Dim iRow As Integer Dim strTo As String Dim strSubject As String Dim strAttachment As String Set objDoc = ActiveDocument Set objTable = objDoc.Tables(1) Set objOutlook = CreateObject("Outlook.Application") For iRow = 2 To objTable.Rows.Count strTo = objTable.Cell(iRow, 2).Range.Text strTo = Left(strTo, Len(strTo) - 2) ' Remove end-of-cell markers strSubject = objTable.Cell(iRow, 4).Range.Text strSubject = Left(strSubject, Len(strSubject) - 2) strAttachment = objTable.Cell(iRow, 5).Range.Text strAttachment = Left(strAttachment, Len(strAttachment) - 2) Set objMail = objOutlook.CreateItem(0) ' olMailItem With objMail .To = strTo .Subject = strSubject .Body = "Dear " & objTable.Cell(iRow, 1).Range.Text & vbCrLf & vbCrLf & "Please find your document attached." If Dir(strAttachment) <> "" Then .Attachments.Add strAttachment End If .Send End With Set objMail = Nothing Next iRow Set objOutlook = Nothing Set objDoc = Nothing MsgBox "Emails sent successfully." End SubNota: Ajuste los números de columna de las celdas para que coincidan con el diseño de su tabla. La columna 1 es la primera columna de su tabla.
- Ejecute la macro
Cierre el editor de VBA. En el documento combinado (MergedOutput.docx), presione Alt+F8, seleccione SendMailWithAttachments y haga clic en Ejecutar. Outlook envía cada correo con el archivo adjunto correcto.
Problemas comunes al enviar correos de combinación de correspondencia con archivos adjuntos
La macro dice “Correo enviado correctamente” pero no llega ningún correo
Outlook puede mover el mensaje a la Bandeja de salida y no enviarlo automáticamente. Abra Outlook, vaya a Archivo > Opciones > Correo y, en Enviar mensajes, asegúrese de que la casilla “Enviar inmediatamente cuando se esté conectado” esté marcada. Como alternativa, cambie la línea de la macro .Send a .Display para revisar cada correo antes de enviarlo manualmente.
Error de archivo adjunto no encontrado
La columna AttachmentPath debe contener la ruta completa exacta. Una letra de unidad faltante, un nombre de carpeta incorrecto o un espacio adicional hacen que la macro omita el archivo adjunto. Verifique la ruta pegándola en el Explorador de archivos de Windows. Si las rutas de archivo contienen espacios, la macro sigue funcionando porque usa la cadena completa.
Outlook no reconoce las direcciones de correo electrónico
La macro lee el texto de la celda incluyendo los marcadores de párrafo. La función Left(strTo, Len(strTo) - 2) elimina los dos caracteres de fin de celda. Si su tabla tiene espacios adicionales o saltos de línea dentro de la celda, use la función Trim: strTo = Trim(Left(strTo, Len(strTo) - 2)).
Combinación de directorio vs. combinación de correspondencia estándar para archivos adjuntos
| Elemento | Combinación de correspondencia estándar (Mensajes de correo electrónico) | Combinación de directorio + macro de VBA |
|---|---|---|
| Archivo adjunto por destinatario | No compatible | Compatible mediante el campo AttachmentPath |
| Contenido del cuerpo del correo | Documento combinado o texto | Cuerpo personalizado definido en la macro |
| Complejidad de configuración | Baja | Moderada |
| Requiere permisos de macro | No | Sí |
| Admite diferentes líneas de asunto | Sí | Sí |
| Funciona con Outlook en la web | No | No |
Ahora puede enviar correos personalizados con archivos adjuntos únicos usando Word y Outlook. Pruebe la macro primero con un conjunto pequeño de destinatarios. Para personalizaciones avanzadas, modifique la macro para incluir un cuerpo de correo HTML estableciendo la propiedad .HTMLBody en lugar de .Body. Este método funciona con Word para Microsoft 365, Word 2021 y Word 2019 en Windows.