La utilización de Word y Outlook para combinar correspondencia es excelente, pero limitada cuando nos enfrentamos a un lista de, por ejemplo, 100 emails personalizados con 1 archivo diferente para cada destinatario… Por defecto, la combinación no se puede hacer, pero si trabajamos un poco, podremos preparar una macro que haga el trabajo por nosotros.
Necesitaremos un par de ingredientes:
- MS Word 2007, 2010, 2013 o superiores
- MS Outlook 2007, 2010, 2013 o superiores
Tiene varias limitaciones de formato, pero es un mal menor con el que tendremos que vivir… El tiempo que nos ahorraremos suplirá el inconveniente de no poder añadir una imagen de cabecera en el email, no?
Continuamos tras el salto, para no saturar la ventana principal…
PROGRAMAR PARA COMBINAR CORRESPONDENCIA
En primer lugar, vamos a tener que localizar la pestaña programador en Word (entra en este enlace si no la encuentras). En Opciones de Word…
Aceptamos, cerramos y ya vemos la ficha programador en la cinta de opciones… nos centramos en el primer bloque de opciones.
Le damos al botón de Macros, escogemos un nombre como “combina”, y le damos a Crear.
Veremos ahora una ventana como esta…
Macro para combinar correspondencia
Vamos a vaciarla y pegarle este código que tenemos aquí abajo (os marco en rojo la dirección de email, que deberéis cambiar por la vuestra para evitar posibles errores):
Sub combina()
Dim Source As Document, Maillist As Document, TempDoc As Document
Dim Datarange As Range
Dim i As Long, j As Long
Set objEmail = CreateObject("CDO.Message")
objEmail.from = "info" @educadictos.com
Dim bStarted As Boolean
Set oOutlookApp = CreateObject("Outlook.Application")
' Dim oItem As Outlook.MailItem
Dim mysubject As String, message As String, title As String
Set Source = ActiveDocument
' Check if Outlook is running. If it is not, start Outlook
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err <> 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
' Open the catalog mailmerge document
With Dialogs(wdDialogFileOpen)
.Show
End With
Set Maillist = ActiveDocument
' Show an input box asking the user for the subject to be inserted into the email messages
message = "Escribe el asunto que llevarán todos los emails" ' Set prompt.
title = " Email Subject Input" ' Set title.
' Display message, title
mysubject = InputBox(message, title)
' Iterate through the Sections of the Source document and the rows of the catalog mailmerge document,
' extracting the information to be included in each email.
For j = 1 To Source.Sections.Count - 1
Set oItem = oOutlookApp.CreateItem(olMailItem)
With oItem
.Subject = mysubject
.Body = Source.Sections(j).Range.Text
Set Datarange = Maillist.Tables(1).Cell(j, 1).Range
Datarange.End = Datarange.End - 1
.To = Datarange
For i = 2 To Maillist.Tables(1).Columns.Count
Set Datarange = Maillist.Tables(1).Cell(j, i).Range
Datarange.End = Datarange.End - 1
.Attachments.Add Trim(Datarange.Text), olByValue, 1
Next i
.Send
End With
Set oItem = Nothing
Next j
Maillist.Close wdDoNotSaveChanges
' Close Outlook if it was started by this macro.
If bStarted Then
oOutlookApp.Quit
End If
MsgBox Source.Sections.Count - 1 & " messages have been sent."
'Clean up
Set oOutlookApp = Nothing
End Sub
Una vez pegado… guardamos y cerramos.
Ahora para combinar correspondencia necesitaremos otros 2 archivos Word…
- Documento 1: Cuerpo del email que queremos enviar, con el texto, nombres, etc… En resumen, el email que vamos a combinar. Supondré que ya sabes hacer combinación, así que no te diré nada más. Tú simplemente ten el email preparado para enviar sin adjuntos.
- Documento 2: Otro word con una tabla de 2 columnas, una con el email del destinatario (que ha de coincidir con uno de los destinatarios del documento 1, lógicamente), y otra con la ruta en tu ordenador del documento que ha de recibir. Y una fila por cada destinatario… algo así:
[alert]La tabla no lleva encabezados.[/alert]
Este Documento 2 lo guardaremos con un nombre reconocible, como “Tabla de adjuntos”, o similar. Y ahora viene lo bueno…
- En el Documento 1, ya escrito y con los campos de combinación cubiertos, le damos a “Finalizar y combinar” y “Editar documentos individuales”.
- En el documento donde vemos el resultado de los emails, nos vamos a la pestaña Programador, le damos al botón de Macros, seleccionamos “Combina” y le damos a ejecutar.
- La macro nos pedirá que le indiquemos dónde está el Documento 2, así que lo llevamos hasta el nuestro y le damos a aceptar. (Este documento tiene que estar cerrado, o la macro dará error).
- Ahora nos pide que añadamos el asunto que llevarán los emails. Aceptamos y listo… Si no tenemos Outlook abierto, lo abrirá, y si ya lo tenemos abierto, irá enviando los emails con los adjuntos rápidamente hasta darnos el resultado de los envíos. Una vez termine, si Outlook estaba abierto, lo dejará abierto, y si estaba cerrado, lo cerrará.
Podéis hacer las pruebas para combinar correspondencia vosotros mismos, veréis que es una macro impresionante
Si queréis añadir más de 1 adjunto, en lugar de tener 2 columnas: destinatario/ruta de archivo, tenemos que tener 3: destinatario/ruta de archivo1/ruta de archivo2… Aunque esta opción no la he probado, prefiero añadirle un archivo único, que puede ser un ZIP con los documentos que vaya a recibir cada destinatario. Cuantas menos cosas puedan dar problema, mejor.
Hola buenas, la macro no me funciona al usarla en MAC, hay que hacer algun cambio?
Me pasa lo mismo, ¿Habría alguna solución?
Muchisimas gracias por la macro
Tengo el mismo problema, lo hice en windows y funcionò perfecto, pero en la MAC no, genera error 429 en tiempo de ejecuciòn el componente ActiveX no puede crear el objeto y señala esta linea de codigo Set objEmail = CreateObject(“CDO.message”) ayuda por favor
Hola, también soy usuario de Mac, lo que pasa es que los comendos de Visual Basic son para entorno Windows y no se pueden emular en Mac directamente, puedes intentar hacer una maquina virtual con Parallels o como Cross Over (ambos son de pago) pero te corren nativamente los comandos y programas de Mac sin tener que reiniciar, a mi me funciona, oajl{a haya ayudado.
Hola!!, buenas como podría utilizar esta macro para enviar mi correo en formato HTML?
Hola, necesito lo mismo. Al enviarla se pierde el formato 🙁
Buenas, Gabriela, ¿lo conseguiste?
Gracias
Muchisimas gracias por la macro
Tengo el mismo problema, lo hice en windows y funcionò perfecto, pero en la MAC no, genera error 429 en tiempo de ejecuciòn el componente ActiveX no puede crear el objeto y señala esta linea de codigo Set objEmail = CreateObject(“CDO.message”) ayuda por favor
A mi no me funciona, no adjunta el archivo, me podría por favor orientar cómo lo hizo? Muchas gracias de antemano.
Hola, al principio no me resulto, solo por copiar mal la ruta. Te recomiendo fijarte bien en eso.
Lo logré, muchas gracias, en formato HTML, anexos e imagen de firma, mis pasos fueron los siguientes:
1) Cree la base de datos con las columnas en excel y lo guarde como base de datos.
2) Cree la tabla con los nombres y la dirección del adjunto en word y lo guarde como archivo para macros.
3) Cambié en la marco el .body por .HTMLbody
4) Cree en otro word el cuerpo del correo incluida la firma (imagen), con los colores, negrillas y demás formatos.
5) Copié todo el cuerpo del correo y lo transformé en formato HTML en la página que nos recomendaron en los comentarios (wordtohtml)
6) Copié el HTML y lo reemplacé en el word del cuerpo del correo.
7) Luego hice la correspondencia e inserté el campo combinado, sugerencia, cuando hagan el word con el cuerpo del correo inicial, pongan un nombre cualquiera de destinatario yo puse PEDRO PEREZ, esto con el fin de poder ubicarlo rápidamente cuando el texto esté en HTML, ahí va el campo combinado.
8) Finalizar y combinar todo.
9) Correr la macro siguiendo todos los pasos.
EN LA MAC NO FUNCIONA, AÚN NO SE PORQUE
Nuevamente gracias y espero les ayude.
Diego,
me podria ayudar con mi macro? Yo he seguido todos los paso, cuando combino todo por medio del macro el me muestra que ha enviado todos los mensjes pero en realidad nunca han salido de mi correo electronico.
Diego Mil gracias!
Tu método funcionó de mil maravillas y logré insertar la firma.
Ahora en MAC jamás podrán hacerlo correr porque esto es para Visual Basic, lo que yo hago en MAC es usar un emulador de Windows como Parallels o CrossOver (este es muy bueno) y correo lo que sea de Windows casi nativamente sin tener que hacer doble boot ni reiniciar, sobre la marcha y fluido, oajl{a sirva
Muchas gracias, fuiste de gran ayuda
Hola, muchas gracias por la información, pero me pasa algo… no muestra las imágenes. ¿qué será?
Muchas gracias!!!!!
Muchas gracias, es de gran ayuda tu aporte
Que bien, hayas subido los archivos. Pudieras compartirlos.
por favor.
Hola,
Mi macro dice que ha enviado los mensajes pero en realidad nunca han salido de mi correo electronico.
Como lo puedo solucionar?
Hola,
Si en el outlook tengo una cuenta principal y un buzón secundario, aunque en la macro salga la secundaria están saliendo desde la principal. ¿Cómo podría hacer para que se envíen desde la secundaria?
Gracias!
tienes que hacer lo siguiente:
* clic “Archivo”
* clic en “Configuración de la Cuenta”
* clic en “Configuración de la Cuenta” de nuevo en las opciones que te despliega
* Te abrirá una ventana donde te pone una lista de los correos que tienes, debes seleccionar el correo del que quieras que salgan los correos y dar clic en “Establecer como predeterminado”.
reinicias Outlook y corres tu macro, ya debe salir del correo que seleccionaste.
Hola, favor su ayuda, que debo agregar en la macro para que el mail se envíe con copia a otro correo?
Hola!!
La macro me funcionó muy bien, gracias por compartirla. Yo tenía el mismo problema tengo un correo personal y otro genérico desde lo quería enviar para solucionarlo cambié temporalmente la cuenta desde Outlook. Has de ir a Archivo>Configuración de la cuenta>Archivo de datos y “Establecer como predeterminado” el correo desde donde quieres que la macro envíe los correos. Espero que te funcione.
separa las cuentas con ; y ya
tengo lio porque hice lo que mencionaron aca para enviarlo en HTML y no me corre la macro 🙁
como puedo agregar alguien en el campo CC y que también se vaya el correo (destinatario con su respectivo CC).
despues de:
.body
coloca
.CC = “correo”
si quieres mas de un correo, debes separarlos por punto y coma (;) seria algo así:
.CC = “correo1; correo2;”
Hola Zoe, me puedes explicar en qué momento lee el CC para armar el correo. Es decir, en dónde coloco los correos adicionales para que se envíe el correo individual con ese CC. En el excel?, va algo en el word de ruta del correo?
Muy buen tutorial, pero a mi me pasa algo curioso, solo envia cuatro correos y nada mas.
A mi me pasa igual! Y necesito enviar más de cuatro, claramente.
Que puede pasar?
Sino me los envía pero sin los datos adjuntos.
Gracias.
revisa la ruta de tus archivos, nombre y extensión, si tu archivo de Excel no tiene un error o algo que lo este deteniendo, prueba a depurar.
ocupa una ruta corta y si salen.
HICE TODOS LOS PASOS PERO NO ME FUNCIONO NO ENVÍA NADA NI MARCA ERROR, sera que podrías mandarme un ejemplo real(los archivos de word) , porfavor me super urge
hola buenas tardes, ¿como puedo agregar copias al envío de los correos?
despues de:
.body
coloca
.CC = “correo”
si quieres mas de un correo, debes separarlos por punto y coma (;) seria algo así:
.CC = “correo1; correo2;”
Hola, he realizado los pasos de maner correcta y me funciono para mas de 200 correos, sin embargo al parecer el office se actualizo y ahora solo envia 20 correos, a pesar de que la tabald e adjuntos tiene relacionada las 200 filas.
Alguna idea de que pueda estar pasando?
Excelente aporte, me funciono perfectamente.
Gracias.
Excelente Tutorial,
Me funcionó al tercer intento pero fue porque no seguí bien los pasos (no leí con detenimiento por el afán).
¡Mil gracias!
Buenos días,
He seguido todos los pasos, y me dice que envía los mails pero no lo hace. Lo he revisado varias veces, pero no encuentro dónde puede estar el error.
Gracias.
Hola.
Siguiendo todas las instrucciones en Office 2013 me funciona correctamente, pero utilizando el Office 2016, incluyendo el Outlook 2016 ya no me funciona.
¿Qué puedo hacer?
He creado todo siguiendo los pasos, hice la macro y la misma anduvo perfectamente por muchos envíos, hasta que luego de como 20 pruebas dejó de adjuntas el PDF que pretendo attachar en cada envío. Los mails sí llegan, pero sin el attach. Qué pudo haber pasado?
Buen dia, necesito enviar mas de un adjunto, como puedo hacer?
En otra columna puedes añadir el segundo adjunto a enviar. Hay un tutorial muy bueno en youtube. No se si permite adjuntar URLs aquí.
https://www.youtube.com/watch?v=FyjOlBRfA3A&t=1391s
la macro no funciona genera error
Gracias! Esta macro me funcionó de maravilla!
Hola! Adriana, no me envía nada…me puedes ayudar? Porfa…
¿será posible modificar para adjuntar dos archivos pdf?
Gracias, muchas gracias. Ya me funcionó.
No me envía nada…antes me está mostrando un error…necesito ayuda.
Me envía pero sin el adjunto.
El documento 1 es el mail base??? sin datos solo el texto??, yo la info de Persona 1, Persona 2, con datos y demás lo combino mediante un archivo de excel y el documento 2 he realizado un documento con 2 columnas izquierda email, derecha ruta…
Algo hago mal pero no sé el qué!!!
Puede ser el siguiente error:
Verificar que la ruta donde se encuetran los archivos adjuntos no esté dentro de comillas dobles
Excelente explicación
Muchas gracias y buen día sr. Koecklin
Saludos,
Uno de los errores por el cual no adjunta los archivos es:
Verificar que la ruta donde se encuetran los archivos adjuntos no esté dentro de comillas dobles.
Buen día