programador - combinar correspondencia

Combinación de correspondencia con archivos adjuntos

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

246 Comentarios

      • 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.

  • 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

  • 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

  • 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!!
      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;”

    • 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

  • 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?

Deja una respuesta

Tu dirección de correo electrónico no será publicada.