¿Cómo enviar correo usando VBA?
Esta pregunta se nos pasa mucho en la cabeza cuando trabajamos con reportes y contamos con una gran base de datos teniendo que enviar a muchos un mismo mensaje.
Es por ello que se presentará un ejemplo practico de como teniendo una base de datos en excel se puede enviar un correo con un simple click.
Tendremos dos macros a utilizar:
1. Correo: El código será el mensaje que recibirá la persona por correo.
La codificación es la siguiente:
Sub correo()
Dim olapp As Outlook.Application
Set olapp = CreateObject("Outlook.Application")
Dim olMail As Outlook.MailItem
Set olMail = olapp.CreateItem(olMailItem)
With olMail
.To = Cells(i, 7).Value
.Subject = "TIENE UN RECIBO PENDIENTE"
.htmlbody = "<FONT SIZE 12 COLOR='BLACK' FACE= 'ARIAL'>" & "Estimado(a): " & "</b><br/>" & "</b><br/>" & Chr(13) & Cells(i, 2) & ", tiene un recibo pendiente por la suma de S/ " & Cells(i, 3) & "; cuya fecha de vencimiento es el dia: " & Cells(i, 4) & _
" .Por favor, acerquese a alguna agencia para realizar el pago de su recibo y evitar inconvenientes con su servicio." & _
"</b><br/>" & "</b><br/>" & "</b><br/>" & "<FONT SIZE 7 COLOR='blue' FACE= 'Tahoma'>" & " NOTA:" & "</b><br/>" & "Si ya hizo el pago haga caso omiso de este mensaje. Muchas gracias."
.Send
End With
End Sub
2. Enviar: Al enviar correctamente nos saldrá el mensaje confirmando que se envió.
Sub enviar()
On Error GoTo controlerror
Worksheets("DATA").Select
ult3 = Cells(2, 2).End(xlDown).Row
k = 0
For i = 2 To ult3
If Cells(i, 6) = "ENVIAR" Then
k = k + 1
Call correo
End If
Next
If k = 1 Then
MsgBox "Se envió un correo.", , ""
ElseIf k > 1 Then
MsgBox "Se enviaron " & k & " correos.", , ""
Else
MsgBox "Hoy no hay mensajes por enviar.", , ""
End If
Exit Sub
controlerror:
MsgBox "Se envió " & k - 1 & " Mensaje(s)." & Chr(10) & Chr(10) & "NOTA: " & Chr(10) & "Ocurrió un error al enviar mensaje desde el cliente: " & Cells(i, 1) _
& ". Compruebe que exista un correo electrónico registrado.", , " ERROR"
End Sub