Cómo enviar correos electrónicos desde una hoja de cálculo de Excel usando los scripts de VBA

Le mostraremos cómo configurar correos electrónicos automáticos desde Excel utilizando Collaboration Data Objects, (CDO) y scripts VBA. Nuestras plantillas de código hacen que esto sea mucho más fácil de lo que parece.

Le mostraremos cómo configurar correos electrónicos automáticos desde Excel utilizando Collaboration Data Objects, (CDO) y scripts VBA.  Nuestras plantillas de código hacen que esto sea mucho más fácil de lo que parece.
Anuncio

Actualizado por Brad Jones el 4 de julio de 2017.

Usar correos electrónicos como parte de cualquier programa es una buena manera de automatizar tareas importantes, y también mejora significativamente el valor y la funcionalidad de cualquier programa o script.

En el pasado, he usado mucho el correo electrónico en mis trabajos por lotes y otros scripts automáticos, que se han descrito en artículos anteriores sobre el uso de herramientas como Sendmail. Envíe correos electrónicos automatizados usando SendEmail y Windows. Programador de tareas Envíe correos electrónicos automatizados usando SendEmail & Windows Task Programador No importa cuál sea su trabajo, generalmente todos en algún momento tienen que enviar un correo electrónico a un jefe o supervisor con informes de estado diarios, semanales o mensuales. Lea más o Blat para emitir correos electrónicos directamente desde la línea de comandos Envíe fácilmente correos electrónicos de línea de comando con Blat Envíe fácilmente correos electrónicos de línea de comando con Blat Blat. No es exactamente la palabra que imagina que sería el nombre de una herramienta que puede usar para enviar correos electrónicos a cualquier persona en el mundo, desde cualquier aplicación o herramienta de software que usted ... Leer más, o desde un script de línea de comandos.

Son excelentes para aquellos momentos en los que tiene un script que monitorea el estado de un equipo o el estado de un proceso específico, pero ¿qué sucede si desea automatizar el envío de correos electrónicos desde productos de Microsoft Office como Word o Excel?

Hay muchas razones por las que puede querer hacerlo. Tal vez tenga personal que actualice documentos u hojas de cálculo semanalmente, y le gustaría recibir una notificación por correo electrónico de cuándo se llevarán a cabo esas actualizaciones, e incluso un informe de los datos de esas hojas. Existen algunas técnicas que puede usar para programar correos electrónicos automáticos desde Excel, pero Collaboration Data Objects (CDO) sigue siendo mi favorito.

Envío de correos electrónicos desde dentro de Microsoft Excel

Probablemente esté pensando que escribir un correo electrónico saliente en un script de Excel VBA será dolorosamente complicado. Bueno, ese no es el caso en absoluto.

CDO es un componente de mensajería utilizado en Windows para algunas generaciones del sistema operativo. Se solía llamar CDONTS, y luego con la llegada de Windows 2000 y XP, se reemplazó con "CDO para Windows 2000". Este componente ya está incluido en su instalación de VBA dentro de Microsoft Word o Excel y está listo para usar.

El uso del componente hace que enviar correos electrónicos desde dentro de productos de Windows con VBA sea extremadamente fácil. En este ejemplo, voy a usar el componente CDO en Microsoft Excel para enviar un correo electrónico que entregará los resultados de una celda específica de Excel.

Crear una macro de VBA

El primer paso es ir a la pestaña Desarrollador de Excel.

Dentro de la pestaña Desarrollador, haga clic en Insertar en el cuadro Controles y luego seleccione un botón de comando.

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel utilizando scripts de VBA sin título

Dibuja en la hoja y luego crea una macro nueva para ella.

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel usando VBA Scripts crea macro

Cuando Microsoft Excel abre el editor de VBA, necesitará agregar la referencia a la biblioteca de CDO. Ve a Herramientas > Referencias en el editor.

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel usando referencias de scripts de VBA

Desplácese hacia abajo en la lista hasta encontrar Microsoft CDO para Windows 2000 Library . Marque la casilla de verificación y haga clic en Aceptar .

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel usando scripts de VBA microsoft cdo

Configurar el CDO desde y hacia los campos

Ahora está listo para usar CDO para emitir correos electrónicos desde dentro de Microsoft Excel. Para hacer esto, primero necesita crear los objetos de correo y configurar todos los campos necesarios para enviar el correo electrónico. Tenga en cuenta que, si bien muchos de los campos son opcionales, se requieren los campos Desde y Hasta .

 Dim CDO_Mail como objeto Dim CDO_Config As Object Dim SMTP_Config As Variant Dim strSujeto como String Dim strFrom como String Dim strTo como String Dim strCc como String Dim strBcc como String Dim strBody As String strSubject = "Resultados de Excel Spreadsheet" strFrom = "ryxxxxxx @ xxxxxcast .net "strTo =" [email protected] "strCc =" "strBcc =" "strBody =" Los resultados totales para este trimestre son: "& Str (Sheet1.Cells (2, 1)) 

Lo bueno de esto es que puedes construir cualquier cadena que quieras para personalizar un mensaje de correo electrónico completo y asignarlo a la variable strBody . Reúna los componentes del mensaje utilizando la cadena & para insertar datos de cualquiera de las hojas de Microsoft Excel directamente en el mensaje de correo electrónico, tal como lo mostré anteriormente.

Configurar CDO para usar un SMTP externo

La siguiente sección del código es donde configurará CDO para usar cualquier servidor SMTP externo que quiera usar. En este caso, no necesito usar SSL porque mi servidor SMTP no lo requiere. CDO es capaz de SSL, pero eso está fuera del alcance de este artículo. Si necesita utilizar SSL, le recomiendo el impresionante escrito de Paul Sadowski sobre el uso de CDO.

 Establecer CDO_Mail = CreateObject ("CDO.Message") En caso de error Ir a Error_Handling Establecer CDO_Config = CreateObject ("CDO.Configuration") CDO_Config.Load -1 Establecer SMTP_Config = CDO_Config.Fields con SMTP_Config .Item ("http://schemas.microsoft .com / cdo / configuration / sendusing ") = 2 .Item (" http://schemas.microsoft.com/cdo/configuration/smtpserver ") =" smtp.gmail.com ".Item (" http: // schemas " .microsoft.com / cdo / configuration / smtpauthenticate ") = 1 .Item (" http://schemas.microsoft.com/cdo/configuration/sendusername ") =" [email protected] ".Item (" http: / /schemas.microsoft.com/cdo/configuration/sendpassword ") =" contraseña ".Item (" http://schemas.microsoft.com/cdo/configuration/smtpserverport ") = 25 .Item (" http: // schemas " .microsoft.com / cdo / configuration / smtpusessl ") = True .Update End With Con el conjunto de CDO_Mail .Configuration = CDO_Config End with 

Finalice la configuración de CDO

Ahora que ha configurado la conexión al servidor SMTP para enviar el correo electrónico, todo lo que tiene que hacer es completar los campos correspondientes para el objeto CDO_Mail y emitir el comando Enviar . Así es como lo haces:

 CDO_Mail.Subject = strSubject CDO_Mail.From = strFrom CDO_Mail.To = strTo CDO_Mail.TextBody = strBody CDO_Mail.CC = strCc CDO_Mail.BCC = strBcc CDO_Mail.Send Error_Handling: Si Err.Description "" Entonces MsgBox Err.Description 

Entonces ahí lo tienes. No habrá cuadros emergentes ni mensajes de alerta de seguridad, lo que puede ocurrir cuando recurres al uso del objeto de correo de Outlook. CDO simplemente recopila el correo electrónico y utiliza los detalles de conexión del servidor SMTP para activar el mensaje. Probablemente sea la forma más fácil que conozco de incorporar el correo electrónico a los scripts de Microsoft Word o Excel VBA.

Así es como se veía el mensaje que recibí en mi bandeja de entrada:

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel usando el correo electrónico de trabajo de VBA Scripts

Solución de problemas

Si recibe un mensaje de error que indica que el transporte no se pudo conectar al servidor, asegúrese de haber ingresado el nombre de usuario, la contraseña, el servidor SMTP y el número de puerto correctos en las líneas de código que figuran debajo con SMTP_Config .

Automatizando el proceso

Está muy bien poder enviar información de Microsoft Excel como un correo electrónico con solo tocar un botón. Sin embargo, es posible que desee utilizar esta funcionalidad de forma periódica, en cuyo caso tendría sentido automatizar el proceso. 5 Recursos para macros de Excel para automatizar sus hojas de cálculo 5 Recursos para macros de Excel para automatizar sus hojas de cálculo Búsqueda de macros de Excel? Aquí hay cinco sitios que tienen lo que está buscando. Lee mas .

Para hacerlo, necesitaremos hacer un cambio en la macro que creamos. Diríjase al Editor de Visual Basic y copie y pase la totalidad del código que reunimos. A continuación, seleccione ThisWorkbook de la jerarquía de proyectos .

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel usando los scripts de VBA thisworkbook

Copie y pegue su código en ThisWorkbook . Luego, reemplace la primera línea con Sub Workbook_Open () . Esto ejecutará la macro cada vez que abra el archivo.

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel usando el libro de ejercicios de VBA Scripts abierto

A continuación, abra el Programador de tareas . Vamos a utilizar esta herramienta para pedirle a Windows que abra la hoja de cálculo automáticamente a intervalos regulares, momento en el que se iniciará nuestra macro, enviando el correo electrónico.

Cómo enviar correos electrónicos desde una hoja de cálculo Excel Usando VBA Los scripts crean una tarea básica

Seleccione Crear tarea básica ... desde el menú Acciones y siga su camino a través del asistente hasta llegar a la pantalla Acción . Seleccione Iniciar un programa y haga clic en Siguiente .

Cómo enviar correos electrónicos desde una hoja de cálculo de Excel Usando VBA Scripts agregue argumentos

Use el botón Examinar para buscar la ubicación de Microsoft Excel en su computadora, o copie y pegue la ruta en el campo Programa / script . Luego, ingrese la ruta a su documento de Microsoft Excel en el campo Agregar argumentos . Complete el asistente y nuestra programación debe estar en su lugar. Vale la pena ejecutar una prueba programando la acción Cómo vaciar automáticamente la papelera de reciclaje en un horario y liberar espacio desperdiciado Cómo vaciar automáticamente la papelera de reciclaje en un horario y liberar espacio perdido Si no vacía regularmente el reciclaje Bin, podría estar desperdiciando gigabytes de espacio en tu disco de datos. Pero ahora Windows 10 puede vaciarlo automáticamente según un cronograma. Lea más por un par de minutos en el futuro y luego modifique la tarea una vez que pueda confirmar que está funcionando.

Es posible que deba ajustar la configuración de su Centro de confianza para asegurarse de que la macro se ejecute correctamente. Para hacerlo, abra la hoja de cálculo y vaya a Archivo > Opciones > Centro de confianza . Desde aquí, haga clic en Configuración del Centro de confianza, y en la siguiente pantalla configure el dial de la radio para No mostrar información sobre el contenido bloqueado .

Haga que Microsoft Excel trabaje para usted

Microsoft Excel es una herramienta increíblemente poderosa, pero aprender cómo aprovecharla al máximo puede ser un poco intimidante. Si realmente quiere dominar el software, deberá sentirse cómodo con VBA. El Tutorial de programación VBA de Excel para principiantes El Tutorial de programación VBA de Excel para principiantes VBA es una poderosa herramienta de Microsoft Office. Puede usarlo para automatizar tareas con macros, establecer desencadenantes y mucho más. Le presentaremos la programación visual básica de Excel con un proyecto simple. Lea más, y esa no es una tarea pequeña.

Sin embargo, los resultados hablan por sí mismos. Con una pequeña experiencia de VBA en su haber, pronto podrá hacer que Microsoft Excel realice tareas básicas sin su supervisión, dándole más tiempo para concentrarse en asuntos más urgentes. Llevarte tiempo lidiar con VBA, pero pronto verás los frutos de tu trabajo si puedes mantenerte con él.

¿Puedes pensar en usos interesantes para CDO en tus propios proyectos de Microsoft Excel, Access o Word? Comparte tus pensamientos e ideas en la sección de comentarios a continuación.

In this article