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.
Se puede ver marcado en azul la línea que se debe activar.
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.
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 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
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"
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
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