Enviar correos puede convertirse en una tarea bastante mecánica y resultar hasta tediosa si básicamente deben hacerse pocos cambios en el contenido del correo que la mayoría de las veces guardan relación con los datos e información de los destinatarios, como por ejemplo: enviar 100 cotizaciones en PDF a cada cliente donde tenemos el formato del mensaje preestablecido y editamos manualmente el nombre del contacto para la primera línea del saludo, insertamos en algún párrafo del cuerpo el valor de la cotización y los servicios que se brindaran y también adjuntamos en PDF el documento que detalla el servicio. Para facilitar y agilizar este proceso podemos utilizar Excel y Outlook que hacen combinación poderosa, permitiendo ahorrar tiempo y ser más eficientes con el equipo de trabajo, proveedores y clientes.
¿Cuándo conviene automatizar?
La automatización del envío de correos por Excel es útil en varias situaciones. Podemos mencionar:
- Encuestas y Boletines: Podemos automatizar para enviar de manera más personalizada encuestas, boletines, instrucciones, brindar enlaces y dejar también un mensaje de agradecimiento al concluir este proceso o campaña.
- Comunicaciones e Informes: Cuando necesitas enviar correos a una gran cantidad de remitentes, como clientes o proveedores, automatizar este proceso cobra especial relevancia por el ahorro de tiempo para enviar promociones, eventos, recordatorios sobre pagos y demás compromisos.
- Correos de Bienvenida: El entorno laboral tiene cada vez más dinamismo y gestionar de forma eficiente el flujo de información en contrataciones y ceses es de vital importancia porque están sujetos regulaciones y marcos legales. La automatización puede evitar alguna situación irregular en la entrega de documentos y permite que los destinatarios cuenten con la información que necesitan a la brevedad.
Requisitos
Además de Excel, la versión que necesitamos de Outlook es la versión Desktop. También es recomendable conocimiento de Visual Basic For Applications para aprovechar mejor las posibilidades de la automatización de correos. Sin embargo, para el ejemplo, basta con seguir las instrucciones para adaptarlo a cada necesidad.
- Excel
- Outlook de Escritorio
Caso práctico
Tenemos una relación de 5 clientes y necesitamos enviar un correo adjuntando la cotización en PDF. El cuerpo del correo tendrá el siguiente formato.
Hola, [Jeff Bezos].
Tenemos el gusto de saludarle. Agradecemos mucho el interés de la empresa [Amazon] en los servicios de nuestra compañía y la comunicación que ha sostenido con nuestro asesor para definir mejor lo que necesita.
Basado en su solicitud, le comunicamos que el valor de los servicios es de:
[$15000]
Adjunto un documento con el detalle de la cotización.
Quedamos atentos para resolver cualquier pregunta.
Saludos cordiales.
Paso 1: Preparar la información
Abrimos un libro de Excel, creamos 2 hojas y lo guardamos en formato “Libro de Excel habilitado para macros (*.xlsm)”.
La hoja Lista contiene datos de los clientes que vamos a utilizar. Es importante que las columnas contengan información correcta y un mismo tipo de dato.

La hoja Formato contiene la estructura y cuerpo del correo. Este formato es el que se verá reflejado en el mensaje enviado. El cuerpo del mensaje contiene 7 párrafos y se resalta en color rojo los datos que serán cambiados al momento de enviar masivamente los correos. Para el ejemplo, solo utilizaremos los párrafos porque Destinatario, CC y Asunto se procesaran internamente en el código.

Adicionalmente, necesitamos tener los adjuntos ya creados, que para el caso será un archivo PDF con el nombre del cliente guardado en una carpeta de la unidad C.

Paso 2: Habilitar la referencia de Outlook en Excel
Con el libro activo, presionamos “ALT+F11” para abrir el editor de Visual Basic para Aplicaciones (VBA).
En la parte superior de la ventana, vamos a Herramientas y elegimos Referencias.

Se abrirá una ventana donde buscaremos “Microsoft Outlook 16.0 Object Library”. Lo activamos con un check y aceptamos. Esta acción permitirá interactuar con Outlook desde Excel.

Paso 3: Escribimos el código VBA para el envío masivo de correos
En el Editor de Visual Basic para Aplicaciones, creamos un módulo desde el explorador de proyectos con Insertar y eligiendo Módulo.

Se creará una ventana en blanco donde pegaremos el siguiente código:
'*********************************************************
'CODIGO VBA PARA ENVÍO MASIVO DE CORREOS CON EXCEL Y OUTLOOK
'DISPONIBLE EN WWW.SENDAOPTIMA.COM
'*********************************************************
Public Sub EnviarCorreosMasivos()
'+++ DECLARACIÓN DE VARIABLES +++
'1. Objetos de Excel
Dim LibroCasoPractico As Excel.Workbook
Dim HojaLista As Excel.Worksheet
Dim HojaFormato As Excel.Worksheet
'2 Objetos de Outlook
Dim AppOutlook As Outlook.Application
Dim MensajeOutlook As Outlook.MailItem
'3 Variables para procesar el algoritmo
Dim Asunto, Destinatario, DestinatarioCC, RutaPDF As String
Dim AdjuntoPDF As Variant
Dim ParrafoCadena(1 To 7) As Variant
'Asignación de variables de Ojbetos Excel
Set LibroCasoPractico = ThisWorkbook
Set HojaLista = LibroCasoPractico.Worksheets("Lista")
Set HojaFormato = LibroCasoPractico.Worksheets("Formato")
'+++ BUCLE PARA ENVIAR CORREOS +++
'Recorremos desde la fila 3 hasta la fila 7 de la Hoja Lista
For i = 3 To 7
'Captura de datos de la Hoja "Lista"
NombreCompleto = HojaLista.Cells(i, 3).Value
Empresa = HojaLista.Cells(i, 4).Value
Destinatario = HojaLista.Cells(i, 5).Value
MontoCotizacion = HojaLista.Cells(i, 6).Value
RutaPDF = HojaLista.Cells(i, 7).Value
'Damos forma a la ruta del archivo adjunto
AdjuntoPDF = RutaPDF & "\" & NombreCompleto & ".pdf"
'Establecemos el formato que que tendrá el asunto
AsuntoCorreo = "Cotización " & Empresa
'Captura de datos de la Hoja "Formato"
ParrafoCadena(1) = "Hola, " & NombreCompleto & "."
ParrafoCadena(2) = "Tenemos el gusto de saludarle. " & _
"Agradecemos mucho el interés de la empresa " & _
Empresa & " " & _
"en los servicios de nuestra compañía y la " & _
"comunicación que ha sostenido con nuestro " & _
"asesor para definir mejor lo que necesita."
ParrafoCadena(3) = HojaFormato.Cells(8, 3).Value
ParrafoCadena(4) = "$" & MontoCotizacion
ParrafoCadena(5) = HojaFormato.Cells(10, 3).Value
ParrafoCadena(6) = HojaFormato.Cells(11, 3).Value
ParrafoCadena(7) = HojaFormato.Cells(12, 3).Value
'Asignación de variables de Objetos Outlook
Set AppOutlook = New Outlook.Application
Set MensajeOutlook = AppOutlook.CreateItem(olMailItem)
'Escritura en el mensaje de correo Outlook
With MensajeOutlook
.Display
.To = Destinatario
.CC = "proyectos@grafosydatos.com"
.Subject = AsuntoCorreo
'Trasladamos los párrafos en el cuerpo del mensaje
.HTMLBody = "<FONT SIZE=3>" & ParrafoCadena(1) & "</font><br>" & _
"<FONT SIZE=3>" & ParrafoCadena(2) & "</font><br>" & _
"<FONT SIZE=3>" & ParrafoCadena(3) & "</font><br>" & _
"<FONT SIZE=3>" & ParrafoCadena(4) & "</font><br>" & _
"<FONT SIZE=3>" & ParrafoCadena(5) & "</font><br>" & _
"<FONT SIZE=3>" & ParrafoCadena(6) & "</font><br>" & _
"<FONT SIZE=3>" & ParrafoCadena(7) & "</font><br>" & .HTMLBody
.Attachments.Add AdjuntoPDF
.Send
End With
'Liberación de variables de Objetos Outlook
Set MensajeOutlook = Nothing
Set AppOutlook = Nothing
Next
'Mensaje personalizado al concluir la tarea
MsgBox ("Las cotizaciones han sido enviadas")
End Sub
El código podemos dividirlo en 2 partes, la primera comprende la Declaración de variables y la segunda parte corresponde a la iteración mediante el Bucle para enviar correos cuya función es leer cada registro de la Hoja Lista para capturar la información del cliente y luego procesarla con el algoritmo para envío del correo.
A partir de la línea 28 empezamos a leer datos de las hojas, para este fin utilizamos las coordenadas cartesianas que nos ayuda a definir la posición de una celda. Es decir, para cada columna se asocia un número de columna de manera correlativa, siendo: A=1, B=2, C=3, etc. Entonces, en la Hoja Lista, la celda que corresponde al primer cliente Bill Gates ubicado la celda C3 tiene sus coordenadas representadas mediante cells(3,3). Esta asociación es bastante útil cuando programamos porque facilita muchísimo la manipulación de celdas.
Cabe resaltar que algunos párrafos de la Hoja Formato (líneas 41, 42 y 49) al contener en el texto información que debemos cambiar de acuerdo a cada cliente, han sido elaborados nuevamente en el código, concatenando de manera conveniente el contenido del párrafo con la variable que se necesita. De esta forma, ParrafoCadena(1) junta el saludo “Hola” con el nombre del cliente guardada en la variable “NombreCompleto“. ParrafoCadena(2) es más extenso pero sirve para insertar dentro del texto la variable “Empresa“. Finalmente ParrafoCadena(4), une el símbolo de dólar con “MontoCotizacion” que guarda el valor numérico de la cotización.
La línea 60 que corresponde a .Display se utiliza únicamente para mostrar en el monitor la ventana de Outlook durante la ejecución del programa, por lo que podemos prescindir de esta línea. En la línea 62 tenemos a .CC, para poner en copia a algún correo, siendo posible también la omisión de esta línea si no la necesitamos. Finalmente, tenemos la estructura del cuerpo en el mensaje a partir de la línea 66, donde hemos dado formato a la fuente de cada párrafo; una opción interesante para personalizar aún más nuestro mensaje.
Paso 4: Ejecutar el código VBA
Antes de ejecutar el código, es conveniente tener abierto el Outlook en el sistema. Para ejecutar el código volvemos al Editor de Visual Basic para Aplicaciones y presionamos F5 o accionamos el botón de ejecución, y enseguida el programa que hemos escrito empezará a trabajar.

DESCARGA
Aquí te dejo el archivo para que puedas poner en práctica el ejercicio.


