programador - combinar correspondencia

Combinación de correspondencia con archivos adjuntos

correspondencia 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…

programador - combinar correspondencia

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.

combina - combinar correspondencia

Veremos ahora una ventana como esta…

macros combinar correspondencia

 

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 = "infoantimailspammer@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í:

 

tabla - combinar correspondencia

[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…

  1. En el Documento 1, ya escrito y con los campos de combinación cubiertos, le damos a  “Finalizar y combinar” y “Editar documentos individuales”.
  2. 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.
  3. 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).
  4. 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.

 

acceso a curso de word avanzado sin requisitos

272 Comentarios

  • Marcos, me funciona super, excelente dato! me funciona perfecto si debo crear un correo igual para todos los destinatarios, pero cómo lo puedo hacer si debo usar combinación de campos, para por ejemplo, cambiar los nombres de los destinatarios en el saludo y mantener el formato de texto?

    • Pones todo lo que quieras que lleve tu correo incluyendo Texto, imagenes, links, colores, etc, luego cortar todo, pegarlo en la página qe convierte Word a HTML (https://wordtohtml.net/), copiar todo el código HTML y pegarlo en la hoja de word, despues haces la combinación de correspondencia buscando en el código lo que quieres sustituir en cada correo (ejemplo los nombres, apellidos, saludo, etc) sigues todos los pasos normales, la combinación se hace ya que tienes el código en el word pegado

      Saludos.

      • Hola Marcos

        Nos puedes compartir un poco más en detalle de como lograste que la macro traduzca el lenguaje HTML?

      • Hola!, me puedes apoyar, ya lo hice, sin embargo se manda con el código html en el cuerpo y no con el formato.
        Mil gracias por tu ayuda

  • Hola, al copiar los emails para crear la tabla no cambian de color, no quedan como hipervinculos. Sera por esto que al ejecutar la macro me dice que no envia ningun email ?

  • Buenos días:
    La macro da el siguiente error:

    Se ha producido el error ‘-214722164 (80040154)’ en tiempo de ejecución:
    Clase no registrada

    ¿Alguien sabe a qué se debe? Gracias

  • Buenos dias,
    La macro funciona excelente pero me gustaría saber si se puede dar un pasito más. Yo tengo varios posibles remitentes de correo dentro de mi outlook, listas de correo a las que pertenezco desde las que puedo remitir. me gustaría que una de estas correspondencias se hiciera desde uno de esos remitente. he probado a ponerlo en la líena de la macro que pone objEmail.from = “info@educadictos.com” pero no me ha funcionado.
    Muchas gracias de antemano.
    un saludo

    • Hola, a mi no me funciona. “Cero mensajes enviados” es la respuesta luego de ejecutar… Ya no se que más hacer.
      Me puedes ayudar por favor?
      Gracias

      • Hola en la linea
        .To = Datarange coloca
        .To = “” & Datarange
        Asi me funcionó para el envío delos adjuntos, pero el cuerpo del correo no me muestra el formato como negrillas.colores, tamaños de la letra tampoco una imagen.

  • Excelente, gracias me ayudo mucho,pero no envía a ningún correo de gmail, sabes como hacer para que también envié a correos de gmail???

  • Hola!

    Me va estupendamente pero os voy a dejar unos cuantos tips porque ayer me estuve peleando un buen rato:

    1- Si la macro te ha funcionado una vez y ya no te ha vuelto a funcionar: La macro se ha de lanzar desde el archivo en el que aparecen la totalidad de mails a mandar (es decir, cuando en el Documento 1 pinchas en “Finalizar y combinar” y “Editar documentos individuales”, se abre un segundo word, DESDE ESE es en el que se lanza la macro! Yo ayer me olvidé de este paso y estuve dandome cabezazos con el teclado una hora jajaja)

    2- Si quieres mandar mail desde un mail que no es el principal en tu outlook:
    No basta con cambiar el mail en la Macro, vas a tener que hacerte un segundo perfil de outlook para que se mande desde ese buzón, si no, se mandará por defecto desde el tuyo (ayer mandé 200 correos desde mi mail personal que tuve que recuperar uno a uno…). Para hacerte un segundo perfil, en outlook vete a “Archivo” – “Configurción de la cuenta” – “Administrar perfiles” – “Mostrar perfiles” – “Agregar” (abajo de agregar marca “Solicitar un perfil”) y ya te queda solo completar! Cuando vuelvas a abrir outlook, te preguntará con qué buzón quieres entrar. Te aconsejo que te mandes un mail de test a ti mismo por si acaso y no vayas a lo loco como yo.

    3- Para añadir una imagen al cuerpo del mail:
    He de dar las gracias a alguien que especificaba en las respuestas pasar todo a HTML y cambiar en la macro el HTMLBody. La etiqueta a la que se refiere y que neceistáis es la siguiente (necesitáis tener guardada la imagen en vuestro equipo local):
    -Si queréis dejar un salto de linea entre el resto del cuerpo del mail y vuestra imagen:

    -Etiqueta necesaria (no olvidéis las comillas):

    4- Si quieres cambiar el mensaje que devuelve la macro:
    Todo lo que aparece después de “MsgBox” y que se encuentra entre comillas, es lo que se va a mostrar. Los símbolos de & lo que hacen es concatenar el texto plano que tu pongas con alguna función específica (como en caso de este mail, el conteo de los mails).

    5- Da exactamente igual el orden de los mails del excel, los que importan es el orden del Documento 2, me explico: La linea 1 del excel mandará el mail al mail de la línea 1 del Documento 2, coincida o no con el mail que está en la línea 1 del Documento 2 o no (eso si, el mail debe estar contenido a lo largo del Documento 2, si no, no lo mandará).

    Y aquí yo tengo una duda que no conseguí resolver ayer y que necesito que alguien que entienda un poco más de VB que yo me ayude por favor:
    ¿En qué linea la macro compara los mails del excel con los del Doc2? Si no entendéis la pregunta trastead la macro un poco y el excel y el Doc2: Si se eliminan los mails del excel y existen en el Doc2, los mails no se mandan (aunque el último MsgBox diga que si, puesto que cuenta las secciones del word y no los mails enviados realmente). Además, si tienes >2 lineas en el excel en las que solo en las dos primeras aparece mail, queda en bucle el último mail que aparezca en Doc2, por lo que si tienes varias líneas vacías en el excel, te enviará un correo por cada una. Yo lo que quería era obtener el mail que sacara del excel y compararlo con null, pero no encuentro en qué momento la Macro comprueba que el excel deba llevar mails, y ahí me quedé jajajajaja (perdón si la pregunta no es muy clara – igual nadie llega hasta aquí para leerla xD).

    Espero que mis quebraderos de cabeza le sirvan a alguien^^

    • No se han guardado las etiquetas que puse de HTML…. voy a ver si consigo que aparezcan (abrir y cerrar diamante = simbolos de mayor y menor de al lado de la Z):

      -Salto de línea:
      Abres diamante br/ cierras diamante

      -Etiqueta necesaria (no olvides las comillas!):
      Abres diamante “Tu ruta donde esté guardada la imagen (ejemplo C:\firma.png)”/ cierras diamante

      • CORRIJO
        -Etiqueta necesaria (no olvides las comillas!):
        Abres diamante img src=“Tu ruta donde esté guardada la imagen (ejemplo C:\firma.png)”/ cierras diamante

    • Hola Yai, definitivamente no logro entender el punto 3; logro cambiar mi word a HTML, pero en donde le digo a la macro que lo que está leyendo es un HTML.

      He hecho pruebas y lo único que logro es enviar un correo con texto y las etiquetas html, pero sin traducir, por lo tanto es totalmente incomprensible.

    • creo que entiendes mas que yo, cuando hago el proceso me dice que efectivamente envié el numero de correos que quería, pero no los veo por ningún lado, que podría ser? incluso veo que se abre el outlook y se cierra en el proceso, pero no se envia nada.

      • Hola en la linea 38
        .To = Datarange
        coloca:
        .To = “” & Datarange
        A mi me funcionó. El otro problema es que no me deja enviar una imagen en el cuerpo del mensaje

  • Hola, estoy usando la macro y el proceso en dos equipos uno con windows 7 y office 13 (FUNCIONA PERFECTO) y en otro con windows 10 64bit y office 2013 y no funciona, los correos no aparecen en outlook para enviarse. Alguien ha experimentado este problema ????

    • Pues me pasa lo mismo, al ejecutar la macro sale el aviso que se enviaron los mensajes pero en el outlook nada.

      • Me sucede esto, se envían según el word, pero no aparecen en mensajes enviados en mi correo, ni en recibidos en las direccciones de prueba.

  • La usé varias veces hasta hace un mes y hoy quise usarla y no funcionó. Alguien sabe por qué puede ser? Me salía un mensaje del antivirus, preguntando si quería continuar o denegar, pero ninguna opción me aceptaba.

  • Gracias, me parece bueno, pero no me funciona, no se si dentro de la operación de Macros debo tener en cuenta que es de la empresa el correo que necesito que emitar correos con adjunto de forma masiva… Si puedes ayudarme te lo agradeceria

  • Hola, he seguido los pasos al pie de la letra y la macros me dice que se envían los correos pero en Outlook no pasa nada, estoy trabajando en Windows 10 de 32Bit, veo que a alguien dejo de funcionarle, alguien sabe a que se deberá?

    • Hola en la linea 38
      .To = Datarange
      coloca:
      .To = “” & Datarange
      A mi me funcionó. El otro problema es que no me deja enviar una imagen en el cuerpo del mensaje

  • Excelente, gracias por compartir el conocimiento, saludos desde Quetzaltenango, Guatemala C.A., resolvió mi problema para enviar documentos adjuntos a cada remitente, les cuento que si pude enviar dos archivos adjuntos, solo agregue una columna con la ubicación del segundo archivo, gracias!!!!!

  • Hola buenos dias,

    De antemano muchisimas gracias por la herramienta me saco de apuros, ahora la pregunta es, existe alguna forma de que el asunto sea personalizado y que se concatene con algun valor del excel por ejemplo
    “Hola señor <> ”

    Gracias.

  • La macro me funciona bien, pero no logro entender como pasar el word al html, y en especial que la macro entienda que lo que está leyendo es lenguaje HTML.

  • Todo funciona perfecto muchas gracias por el aporte.

    solo quiero saber como puedo agregar en el macros que se envíe con copia a otro correo.

    Gracias

  • Buenas tardes, tengo el mismo problema, al final del proceso me sale que se han enviado los mensajes pero voy al correo y no se refleja ninguno.. Porfavor me ayudan con esa inquietud.
    Saludos

  • Hola, por favor su ayuda, mi laptop se ha actualizado y ya no cuento con el Outlook tradicional, sino que con una aplicación “Correo y Calendario” que es del mismo Microsoft; antes me funcionaba esta técnica pero ahora no puedo, por favor ayudarme, a mí parecer creo que cambia el macros.

  • Hola, la había usado sin problema, pero he notado que se me ha borrado la macro y al querer crearla nuevamente me da un error en la cuenta de correo de gmail que le configuro. Me aparece un error de compilación. a alguien le ha pasado y como se solucionaría? Gracias.

  • Buenas tardes, tengo el mismo problema, al final del proceso me sale que se han enviado los mensajes pero voy al correo y no se refleja ninguno.. Porfavor me ayudan con esa inquietud.
    Saludos

  • hola, ayer me funciono todo bien y hoy haciendo lo mismo me envia los correos pero no adjunta los archivos y la ruta está bien, me podeis decir qué puede ser.
    gracias.

  • buenos días
    Esta macro me vendría muy bien en la oficina, pero no consigo que me envíe los documentos adjuntos.
    Me gustaría me pudieran echar una mano

    • Con gusto podría apoyarte yo he logrado enviar los adjuntos pero lo que no he logrado es poder enviar el cuerpo de correo en formato html ojalá alguien podría apoyarme envía un mail y te ayudo benespi87@gmail.com

    • Hola en la linea 38
      .To = Datarange
      coloca:
      .To = “” & Datarange
      A mi me funcionó. El otro problema es que no me deja enviar una imagen en el cuerpo del mensaje

  • Buenas tardes….alguien logró utilizar la macro enviando dos más archivos adjuntos?
    También pregunto si alguien descifró sobre el cuerpo de correo se envíe con los formatos aplicados en word (negrita, cursiva, color fuente, etc)

  • Hola, qué tal!… ¿saben que comando se le agrega a la macro para que solicite confirmación de lectura el correo enviado?

    Gracias.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *