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:
03 | Dim olMailItm As Object |
07 | Set olApp = CreateObject( "Outlook.Application" ) |
12 | For Each destinatario In Range( "A2:A4" ) |
14 | Set olMailItm = olApp.CreateItem(0) |
19 | .to = destinatario.Value |
21 | .Subject = destinatario.Offset(0, 1).Value |
23 | .Body = destinatario.Offset(0, 2).Value |
30 | Set olMailItm = Nothing |
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.
como hacer que se envie a X hora del dia
ResponderBorrarHola Edwin, debes utilizar la propiedad DeferredDeliveryTime dentro del with:
Borrarhttps://docs.microsoft.com/en-us/office/vba/api/outlook.mailitem.deferreddeliverytime