Lección 23: Enviar automáticamente un email desde Excel con VBA (Lotus).

email-excel-vba

Escrito por Administrador

3 de septiembre de 2021

En esta lección vas a aprender cómo enviar un email de manera automática desde Microsoft Excel usando VBA a través de la aplicación Lotus.

He elegido esta plataforma ya que es la de mayor uso corporativo y más compleja de programar. Sin embargo, si hay alguien interesado en usar otro tipo de programa como, por ejemplo, Outlook o similar, solo tiene que comentármelo y organizo una lección para ello.

Además, hoy también aprenderás a usar funciones. De hecho, el programa de envío de emails lo he confeccionado como función. Pero, no te asustes. En realidad, una función es un programa estándar con una serie de parámetros que le tienes que especificar para poder ejecutarse.

Al definir una función, entre paréntesis, definimos que parámetros tendremos que darle a la hora de ejecutarla. Por ejemplo, la siguiente función necesita que le demos el asunto (subject) cuando la llamemos.

Sub SendEmail(Subject)

Dentro del código de la función se llamará a ese parámetro (subject) y si no se lo hemos pasado, nos dará error.

Por otro lado, para llamar a una función, solo tenemos que poner su nombre, rellenando los parámetros que necesita. Para el ejemplo anterior, llamaríamos a la función enviar email, que lo enviaría con el asunto “Control de gastos”.

SendEmail "Control de gastos"

Probablemente, vamos a abordar el caso más complejo, enviar un email desde Microsoft Excel usando VBA a varios destinatarios con adjuntos (para poder enviar emails de manera automática, debes tener abierta la sesión en Lotus).

En primer lugar, crea un libro nuevo e inserta un módulo. Después, copia el código completo. Los campos a personalizar por ti se encuentran coloreados en rojo.

Seguidamente, crea un botón y asígnale la macro.

A continuación, te dejo el enlace del tema donde explico cómo asignar una macro a un botón.

Macro 1. Enviar un email (Lotus).

Sub email()

SendEmail "Control de gastos"

End Sub

Sub SendEmail(Subject)

Dim Maildb As Object

Dim mailDoc As Object

Dim body As Object

Dim session As Object

Dim Recipient As Variant

'Inicio de sesión en Lotus

Set session = CreateObject("Notes.NotesSession")

'Abre la base de datos de Lotus

Set Maildb = session.GetDatabase("", "names.nsf")

If Not Maildb.IsOpen = True Then

Call Maildb.Open

End If

'Crea un nuevo email

Set mailDoc = Maildb.CreateDocument

Call mailDoc.ReplaceItemValue("Form", "Memo")

'Elegimos los destinatarios

Recipient = Array("email1@direccion.com", "email2@direccion.com", "email3@direccion.com")

Call mailDoc.ReplaceItemValue("SendTo", Recipient)

'Insertamos el asunto elegido

Call mailDoc.ReplaceItemValue("Subject", Subject)

'Escribimos el contenido del email

Set body = mailDoc.CreateRichTextItem("Body")

Call body.AppendText("Buenos días,")

Call body.AddNewLine(2)

Call body.AppendText("Se adjunta archivo con control de gastos.")

Call body.AddNewLine(2)

Call body.AppendText("Saludos.")

'Insertamos un archivo adjunto

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.xls")

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.doc")

Call body.AddNewLine(2)

mailDoc.SaveMessageOnSend = True

Call mailDoc.ReplaceItemValue("PostedDate", Now())

Call mailDoc.send(False)

'Limpiamos

Set Maildb = Nothing

Set mailDoc = Nothing

Set body = Nothing

Set session = Nothing

End Sub

Antes de pulsar el botón, vamos a repasar el código y te voy a ir explicando qué hacemos en cada paso.

La primera parte del código es la macro, de nombre “email”. Solo contiene una línea, que es la llamada a la función “SendEmail”. En realidad, lo único que hacemos es pasarle el parámetro (subject) con el valor “Control de gastos”, que será el asunto del correo electrónico.

Sub email()

SendEmail "Control de gastos"

End Sub

Y, la segunda parte del código es la función. Su nombre es SendEmail y entre paréntesis aparece el único parámetro que necesita para ejecutarse (Subject), que ya se lo hemos pasado al llamarla desde la macro.

Sub SendEmail(Subject)

En primer lugar, declaramos una serie de variables que vamos a usar posteriormente.

Dim Maildb As Object

Dim mailDoc As Object

Dim body As Object

Dim session As Object

Dim Recipient As Variant

Seguidamente iniciamos la sesión en Lotus con nuestro usuario.

'Inicio de sesión en Lotus

Set session = CreateObject("Notes.NotesSession")

Después, abrimos la base de datos de Lotus para poder trabajar.

'Abre la base de datos de Lotus

Set Maildb = session.GetDatabase("", "names.nsf")

If Not Maildb.IsOpen = True Then

Call Maildb.Open

End If

A continuación, creamos un nuevo email.

'Crea un nuevo email

Set mailDoc = Maildb.CreateDocument

Call mailDoc.ReplaceItemValue("Form", "Memo")

Para poder enviar un correo a varios destinatarios es necesario crear un array de direcciones, como si se tratara de una matriz.

'Elegimos los destinatarios

Recipient = Array("email1@direccion.com", "email2@direccion.com", "email3@direccion.com")

Call mailDoc.ReplaceItemValue("SendTo", Recipient)

Ahora insertamos en el asunto el texto que introdujimos en el parámetro cuando llamamos a la función “Control de gastos”.

'Insertamos el asunto elegido

Call mailDoc.ReplaceItemValue("Subject", Subject)

Podemos establecer el contenido del email con un texto estándar, tipo “Buenos días, se adjunta archivo con control de gastos.”

El comando Call body.AddNewLine(2) simplemente inserta un espacio para separar párrafos.

'Escribimos el contenido del email

Set body = mailDoc.CreateRichTextItem("Body")

Call body.AppendText("Buenos días,")

Call body.AddNewLine(2)

Call body.AppendText("Se adjunta archivo con control de gastos.")

Call body.AddNewLine(2)

Call body.AppendText("Saludos.")

Así mismo, si queremos insertar archivos adjuntos, tan solo tenemos que saber la ruta de los mismos.

'Insertamos un archivo adjunto

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.xls")

Call body.AddNewLine(2)

Call body.EmbedObject(1454, "", "C:\Users\usuario\Desktop\Control de gastos.doc")

Call body.AddNewLine(2)

Elegimos que se guarde en enviados.

mailDoc.SaveMessageOnSend = True

Call mailDoc.ReplaceItemValue("PostedDate", Now())

Call mailDoc.send(False)

Por último, limpiamos y salimos.

Set Maildb = Nothing

Set mailDoc = Nothing

Set body = Nothing

Set session = Nothing

End Sub

Con esto llegamos al final de la vigesimotercera lección, en la que has aprendido a enviar un email desde Microsoft Excel usando VBA.

Finalmente, desear que te esté gustando el curso y pedirte que me plantees cualquier duda que te surja. También, puedes proponerme macros que te interese desarrollar y las voy incluyendo en el temario. De hecho, soy todo oídos. Nos vemos en el próximo capítulo.

Descarga el archivo del ejemplo

« L22. Evento Change e Intersect en VBA.

EP1. Cómo importar datos de otra hoja con macros. »

0 comentarios

Enviar un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.

Quizá te interese,

Contacto