Cómo combinar correspondencia con adjuntos desde Excel

Una carencia de Microsoft Word en su funcionalidad de envío de correspondencia masiva, también llamado Combinar correspondencia, es la de no poder personalizar el asunto o añadir archivos adjuntos. A continuación sabremos cómo enviar emails desde Excel con archivos adjuntos. y cómo enviar emails desde Excel con el asunto personalizado al receptor del email.

Activar Microsoft Outlook 15.0 Object Library


Antes de comenzar debemos activar en el menú del editor de visual basic, esta opción. Su activación se encuentra dentro del desplegable Herramientas, en el menú Referencias.

Referencias_Visual_Basic

Se puede ver marcado en azul la línea que se debe activar.


Outlook_Object_Library

Crear una tabla de datos

Para enviar una correspondencia, debemos tener una tabla de datos ordenados y estructurados, de donde iremos tomando valores para luego ir pegándolos en el email. Voy a emplear el ejemplo de más abajo para saber cómo personalizar el asunto en un envío masivo de emails.

Combinar_Correspondencia_Datos

Declaración de variables

Dim Asunto, Nombre, Importe, Fecha, email, agente As String

Después de seleccionar una de las columnas, declararemos las variables con la propiedad offset, es decir, haciendo referencia a las celdas adyacentes a la selección.

La variable para conocer la última fila del archivo excel la damos por sentada.

La variable asunto, haremos que sea una combinación de los datos añadida a un texto estándar que generemos.

Las variables para importe y para fecha se le ha añadido un formateo para que nos quede como en este caso queremos, también es totalmente personalizable.

For Each cell In Range("A2: A" & ultimafila)


Nombre = cell.value
Importe = Format(cell.Offset(0, 1).value, "#.##,## €")
Fecha = Format(cell.Offset(0, 2).value, "dd/mm/yyyy")
email = cell.offset(0,3).value
agente= cell.offset(0,4).value

Asunto = "Aviso de pago hasta " & Fecha & ". " & Nombre


Next cell



declaracion_variables

Variable para el archivo adjunto

En el caso de que queramos combinar correspondencia añadiendo un archivo adjunto, deberemos declarar la ruta de ese archivo como una variable para posteriormente adjuntarlo a Outlook.

Dim adjunto as String

adjunto = "C:\Users\Documents\Plantilla.xlsx"


Variable para cuerpo del mensaje

En el caso de querer también personalizar el cuerpo del mensaje al hacer un envío masivo de correspondencia, seguiría el mismo patrón. Habría que declarar una variable y definirla.

Dim cuerpoemail as String

cuerpoemail = "Buenos días," & vbNewLine & "Le informamos que su saldo pendiente de liquidar a fecha " & Fecha & " asciende a " & Importe & "." & vbNewLine & "Atentamente." & vbNewLine & agente

Macro completa para enviar emails con adjunto


Sub CorrespondenciaConAdjunto()
Dim OutlookApp As Outlook.Application

Dim MItem As Outlook.MailItem

Dim ultimafila As Long

Dim cell As Range
Dim Nombre, Importe, Fecha, email, agente, Asunto As String
Dim adjunto, cuerpoemail As String

ultimafila = Range("A" & Rows.Count).End(xlUp).Row

Set OutlookApp = New Outlook.Application

For Each cell In Range("A2: A" & ultimafila)

Nombre = cell.value

Importe = Format(cell.Offset(0, 1).value, "#.##,## €")

Fecha = Format(cell.Offset(0, 2).value, "dd/mm/yyyy")

email = cell.Offset(0, 3).value

agente = cell.Offset(0, 4).value

Asunto = "Aviso de pago hasta " & Fecha & ". " & Nombre

adjunto = "C:\Users\Documents\Plantilla.xlsx"

cuerpoemail = "Buenos días," & vbNewLine & "Le informamos que su saldo pendiente de liquidar a fecha " & Fecha & " asciende a " & Importe & "." & vbNewLine & "Atentamente." & vbNewLine & agente
                
Set MItem = OutlookApp.CreateItem(olMailItem)

        With MItem
            .To = email
            .Subject = Asunto
            .body = cuerpoemail
            .Display
            .Attachments.Add CStr(adjunto)
'            .Send
                        '
        End With
                              
Next cell               


End Sub




Envío automático

En el código de más arriba está desactivado el envío automático del correo, es decir, lo que equivaldría a pulsar el botón de enviar.

Simplemente borrando el apostrofe que precede a .Send, el envío se haría automáticamente.

No hay comentarios:

Publicar un comentario

Otras entradas