Saltar al contenido

Envíe correos electrónicos desde una hoja de cálculo de Excel con scripts de VBA

Enviar correos electrónicos desde Microsoft Excel solo requiere unos pocos scripts simples. Agregue esta funcionalidad a sus hojas de cálculo y podrá lograr mucho más en Excel.

Las macros de Excel pueden hacer muchas de las mismas cosas que los scripts de VBA, sin requerir tantos conocimientos de programación. Con VBA, puede implementar rutinas más avanzadas, como crear un informe de hoja de cálculo con toda la información de su PC.

¿Prefieres ver este tutorial como un video? ¡Te tenemos cubierto!

¿Por qué enviar correo electrónico desde Excel?

Hay muchas razones por las que puede querer enviar un correo electrónico desde Microsoft Excel.

Tal vez tenga empleados que actualicen documentos u hojas de cálculo todas las semanas y deseen recibir una notificación por correo electrónico cuando lo hagan. O tal vez tiene una hoja de cálculo de contactos y desea enviarles un correo electrónico a todos a la vez.

Probablemente piense que programar una transmisión de correo electrónico desde Excel será complicado. Ese no es el caso en absoluto. La técnica de este artículo utiliza una función que ha estado disponible en Excel VBA durante mucho tiempo, Objetos de datos de colaboración (CDO).


CDO es un componente de mensajería que se ha utilizado en Windows desde las primeras generaciones del sistema operativo. Solía ​​llamarse CDONTS y ​​luego fue reemplazado por «CDO para Windows 2000» con la llegada de Windows 2000 y XP. 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 el envío de correos electrónicos desde productos Windows usando VBA sea extremadamente fácil. En este ejemplo, utiliza el componente CDO en Excel para enviar un correo electrónico que proporciona los resultados de una celda de Excel específica.

Paso 1: prepara tu cuenta de Gmail

Para enviar correos electrónicos desde Microsoft Excel, usaremos Gmail, aunque puede modificar la macro a continuación para que funcione con otros clientes de correo electrónico. Tenga en cuenta que Gmail ya no permite el acceso a aplicaciones de terceros, lo que significa que primero deberá habilitar la verificación en dos pasos de Gmail.

De ti Página de seguridad de la cuenta de Googleabajo Iniciar sesión en GoogleHacer clic Contraseñas de aplicaciones. En la pantalla Contraseñas de la aplicación, busque la Seleccionar aplicación menú desplegable y seleccione Correo. De Seleccione el dispositivoSeleccione computadora con windows. Luego haga clic PARA GENERAR.

Escriba la contraseña de la aplicación de 16 caracteres; lo necesita cuando configura la macro.

Paso 2: crear una macro de VBA

Consejo: Antes de comenzar, guarde el archivo de Excel con el que trabajará como Libro de trabajo con macroses decir, en formato XLSM.

Primero necesitamos la pestaña Desarrollador de Excel. Si no lo ve, a continuación le indicamos cómo habilitarlo:

  1. Ir Archivo > Opciones.
  2. abajo Personalizar la cinta de opciones > Pestañas principalescomprobar el Desarrollador elección.
  3. Hacer clic De acuerdo para guardar sus cambios.

En la pestaña Desarrolladores de Excel, haga clic en Insertar en el cuadro Control y, a continuación, seleccione un botón de comando.


Dibújelo en la hoja de trabajo y luego cree una nueva macro para él presionando . hacer click macros en la cinta del desarrollador.

Cuando haces clic en el Crear botón, se abre el editor de VBA.

Agregue la referencia a la biblioteca CDO navegando a Instrumentos > Referencias en la redacción.

Desplácese por la lista hasta que encuentre Microsoft CDO para la biblioteca de Windows 2000. Marque la casilla de verificación y haga clic en De acuerdo.

cuando haces clic De acuerdo, anote el nombre de la función en la que está pegando el script. Lo necesitarás más tarde.

Paso 3: Configura tu macro

Ahora está listo para crear los objetos de correo electrónico y configurar todos los campos necesarios para enviar un correo electrónico. Tenga en cuenta que, si bien muchos de los campos son opcionales, el De y Hasta que los campos son obligatorios. Pegue todos los fragmentos de código a continuación en su Módulo1 (Código) ventana.

Así es como se ve el código completo:

Sub Send_Emails()
Dim NewMail As CDO.Message
Dim mailConfig As CDO.Configuration
Dim fields As Variant
Dim msConfigURL As String
On Error GoTo Err:
'early binding
Set NewMail = New CDO.Message
Set mailConfig = New CDO.Configuration
'load all default configurations
mailConfig.Load -1
Set fields = mailConfig.fields
'Set All Email Properties
With NewMail
.From = "[email protected]"
.To = "[email protected]"
.CC = ""
.BCC = ""
.Subject = "Send Email From an Excel Spreadsheet"
.TextBody = "This is the body of your email. And here is some added data:" & Str(Sheet1.Cells(2, 1))
.Addattachment "c:dataemail.xlsx" 'Optional file attachment; remove if not needed.
.Addattachment "c:dataemail.pdf" 'Duplicate the line for a second attachment.
End With
msConfigURL = "http://schemas.microsoft.com/cdo/configuration"
With fields
.Item(msConfigURL & "/smtpusessl") = True 'Enable SSL Authentication
.Item(msConfigURL & "/smtpauthenticate") = 1 'SMTP authentication Enabled
.Item(msConfigURL & "/smtpserver") = "smtp.gmail.com" 'Set the SMTP server details
.Item(msConfigURL & "/smtpserverport") = 465 'Set the SMTP port Details
.Item(msConfigURL & "/sendusing") = 2 'Send using default setting
.Item(msConfigURL & "/sendusername") = "[email protected]" 'Your gmail address
.Item(msConfigURL & "/sendpassword") = "password" 'Your password or App Password
.Update 'Update the configuration fields
End With
NewMail.Configuration = mailConfig
NewMail.Send

MsgBox "Your email has been sent", vbInformation
Exit_Err:
'Release object memory
Set NewMail = Nothing
Set mailConfig = Nothing
End
Err:
Select Case Err.Number
Case -2147220973 'Could be because of Internet Connection
MsgBox "Check your internet connection." & vbNewLine & Err.Number & ": " & Err.Description
Case -2147220975 'Incorrect credentials User ID or password
MsgBox "Check your login credentials and try again." & vbNewLine & Err.Number & ": " & Err.Description
Case Else 'Report other errors
MsgBox "Error encountered while sending email." & vbNewLine & Err.Number & ": " & Err.Description
End Select
Resume Exit_Err
End Sub

Y estas son las secciones y campos que necesitas personalizar:

  • Con NuevoCorreo: Esta sección contiene todos los parámetros para enviar su correo electrónico, incluido el cuerpo de su correo electrónico. los .De El campo debe contener su dirección de Gmail, pero puede configurar los otros campos como desee. Para el cuerpo, puede componer componentes del mensaje usando el & cadena para insertar datos de una de las hojas de Microsoft Excel directamente en el correo electrónico, tal como se muestra arriba. También puede adjuntar uno o más archivos.
  • Con campos: Aquí es donde configura la configuración de SMTP para su cuenta de Gmail. Deja el servidor SMTP y puerto del servidor smtp campos tal y como están al copiar el código. Ingrese su nombre de usuario de Gmail y la contraseña de la aplicación de 16 dígitos en los campos respectivos.

Paso 4: prueba tu macro

En el editor de VBA, vaya a Ejecutar > Ejecutar sub/formulario de usuario o presione F5 para probar la macro. Si no se recibe su correo electrónico, debería ver un mensaje de error. De lo contrario, verá una confirmación de que su correo electrónico se ha enviado correctamente.

Si recibe un mensaje de error con el texto El transporte no pudo conectarse 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 a continuación con campos.

Paso 5: conecte el botón de comando a su secuencia de comandos

Para asociar su botón de comando con este script, vaya al editor de código y haga doble clic Página 1 para ver el código VBA para esa hoja de trabajo. Seleccione su botón, por ejemplo. Botón de comando1de la lista desplegable de la izquierda y defina la acción de la derecha; Hacer clic trabajar. Luego escriba el nombre de la función donde pegó el script anterior; en nuestro ejemplo es Enviar correos electrónicos.

Ahora, cuando regrese a su hoja, haga clic en el botón para enviar el correo electrónico.

Aquí hay un ejemplo de cómo debería verse el mensaje en su bandeja de entrada:

Vaya más allá y automatice todo el proceso

Está muy bien poder enviar correos electrónicos desde Excel con solo tocar un botón. Sin embargo, es posible que desee utilizar esta funcionalidad con regularidad, en cuyo caso tiene sentido automatizar el proceso. Para hacer esto, necesita hacer un cambio en la macro. Vaya al Editor de Visual Basic y copie y pegue todo el código que ha creado hasta ahora.


Luego haga doble clic Este libro de trabajo del proyecto VBA jerarquía.

Seleccione de los dos campos desplegables en la parte superior de la ventana de código Libro de trabajo y seleccione Abierto de la lista desplegable Métodos.

Pegue el script de correo electrónico de arriba Subworkfolder_Open().

Esto ejecutará la macro cuando abra el archivo de Excel.

Entonces abre Programador de tareas. Utilizará esta herramienta para pedirle a Windows que abra automáticamente la hoja de cálculo a intervalos regulares, luego ejecute su macro y envíe el correo electrónico.

Del Acción menú, seleccione Crear tarea básica… y avance a través del asistente hasta que vea el Acción pantalla.

Seleccione iniciar un programa y haga clic El proximo. Utilizar el para hojear para encontrar la ubicación de Microsoft Excel en su computadora, o copie y pegue la ruta en el programa/guion campo. Luego ingrese la ruta a su documento de Microsoft Excel en el Agregar argumentos campo. Complete el asistente y su agenda estará lista.

Vale la pena hacer una prueba programando la acción unos minutos en el futuro y luego ajustando la tarea una vez que puedas confirmar que está funcionando.

Observación: Es posible que deba ajustar la configuración de su Centro de confianza para que la macro se ejecute correctamente.

Para hacer esto, abra la hoja de cálculo y navegue hasta Expediente > Opciones > Centro de confianza. Desde aquí haz clic en Configuración del centro de confianza…y en la siguiente pantalla configure el botón de radio para Nunca mostrar información sobre contenido bloqueado.

Haga que Microsoft Excel trabaje para usted

Microsoft Excel es una herramienta increíblemente poderosa, pero aprender a aprovecharla al máximo puede ser un poco intimidante. Si realmente desea dominar el software, debe estar familiarizado con VBA, y esa no es una tarea fácil.

Sin embargo, los resultados hablan por sí solos. Con un poco de experiencia en VBA en su haber, pronto podrá hacer que Microsoft Excel realice tareas básicas automáticamente, dejándole más tiempo para concentrarse en asuntos más urgentes.