Envío de correos automáticos con Excel y Outlook

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=1B=2C=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 4142 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.

Scroll al inicio