sábado, 15 de octubre de 2016

Como automatizar el envío de correos con una macro en vba y outlook?

Hace algunas semanas en el trabajo, alguién me preguntaba por la forma de enviar varios emails desde excel con diferentes asuntos y cuerpos de texto de los correos electrónicos. La idea, es hacerlo utilizando outlook. La pregunta concreta fue: Si existía o no la posibilidad de automatizar la tarea con una macro, de forma tal que esta se pudiera realizar con un simple clic?

A continuación vamos a ver como podemos realizar esta tarea, y como tomando como base el código en vba que adjunto en el post, podemos personalizarlo y crear una solución que se adapte a las necesidades que tengamos.

Veamos, tengo una hoja excel. En una de las columnas tengo varias direcciones de correo electrónico (cada una en una celda), tengo el asunto a tratar en cada correo y tengo el cuerpo del mismo:


Vamos a llamar el editor de vba (Alt+F11), y vamos a ingresar el siguiente código:


01Sub EnviarCorreos()
02Dim olApp As Object
03Dim olMailItm As Object
04
05'Creamos un objeto de MS Outlook'
06
07Set olApp = CreateObject("Outlook.Application")
08
09'El objeto anterior lo vamos a utilizar
10'para poder crear un email en blanco
11
12For Each destinatario In Range("A2:A4")
13    
14    Set olMailItm = olApp.CreateItem(0)
15    With olMailItm
16        'indicamos quién es el destinatario
17        
18        'tambien podemos usar .cc o .bbc
19        .to = destinatario.Value
20        'el asunto
21        .Subject = destinatario.Offset(0, 1).Value
22        ' y el cuerpo del correo electrónico
23        .Body = destinatario.Offset(0, 2).Value
24        'y lo enviamos
25        .Send
26    End With
27Next destinatario
28
29'Y por último limpiamos de la memoria los objetos creados
30Set olMailItm = Nothing
31Set olApp = Nothing
32End Sub


Eso es todo. Si queremos podemos agregar un botón para la ejecución de la macro o simplemente hacerlo desde el menú.

Si tienen dudas sobre el código y quieren ver que hace cada línea, recuerden que desde el editor de visual basic pueden ejecutar el código paso a paso con F8. 

Hay otras propiedades o métodos que podemos aprovechar para hacer mas interesante el proceso, como pueden ser configurar la macro para enviar el correo en una fecha y hora deseada, adjuntar múltiples archivos etc.

Por último, otra muy buena aplicación que le podemos dar a esta macro, es pegarla o llamarla en otra macro que su proceso de ejecución tome una (1) hora o más, le ponemos un condicional y le decimos que cuando el proceso finalice o se interrumpa por algún error, nos envíe un correo por outlook confirmando la ejecución de la rutina o la aparición de errores en la misma.

2 comentarios:

  1. como hacer que se envie a X hora del dia

    ResponderBorrar
    Respuestas
    1. Hola Edwin, debes utilizar la propiedad DeferredDeliveryTime dentro del with:

      https://docs.microsoft.com/en-us/office/vba/api/outlook.mailitem.deferreddeliverytime

      Borrar