Enviar correo electrónico desde Excel

Compatibilidad: Truco compatible con Excel 365Truco compatible con Excel 2016Truco compatible con Excel 2013Truco compatible con Excel 2010Truco compatible con Excel 2007

Microsoft Excel dispone de la opción para enviar correo electrónico, con una copia del libro. Pero podemos crear una macro con la cuenta de correo indicada y con el asunto deseado.

Deberemos de tener instalado un programa gestor de correo electrónico y una cuenta configurada.

Enviar correo electrónico desde Excel
  1. Con Excel abierto.

  2. Pulsar la tecla Alt y mantener pulsada / Pulsar la tecla F11. Mostrará el editor de Visual Basic.

  3. Ir a: Barra de Menú / Insertar / Módulo. Mostrará la ventana del módulo donde escribimos la macro.

  4. Escribir el código de la macro:

  • ENVIAR LIBRO EXCEL. Envía una copia del libro abierto, a la cuenta y con el asunto indicado.

Sub Enviar_Correo_Libro()

On Error Resume Next

ActiveWorkbook.SendMail Recipients:="cuentacorreo@cuentacorreo.com", Subject:="Datos actualizados"

End Sub

Recipients:="cuentacorreo@cuentacorreo.com", correo electrónico del destinatario.
Subject:="Datos actualizados", asunto del correo electrónico.

  • ENVIAR HOJA1. Envía la Hoja1 del libro activo, a la cuenta y con el asunto indicado.

Sub Enviar_Correo_Hoja1()

On Error Resume Next

ActiveWorkbook.Sheets(1).Copy

With ActiveWorkbook

.SendMail Recipients:="cuentacorreo@cuentacorreo.com", Subject:=" Datos actualizados"

.Close SaveChanges:=False

End With

End Sub

Recipients:="cuentacorreo@cuentacorreo.com", correo electrónico del destinatario.
Subject:="Datos actualizados", asunto del correo electrónico.

  • ENVIAR HOJA ACTIVA Envía una copia de la hoja activa, a la cuenta y con el asunto indicado.

Sub Enviar_Correo_HojaActiva()

On Error Resume Next

ActiveSheet.Copy

With ActiveWorkbook

.SendMail Recipients:="cuentacorreo@cuentacorreo.com", Subject:="Datos actualizados"

.Close SaveChanges:=False

End With

End Sub

Recipients:="cuentacorreo@cuentacorreo.com", correo electrónico del destinatario.
Subject:="Datos actualizados", asunto del correo electrónico.

  • ENVIAR EL RANGO DESEADO Envia un rango de celdas en el cuerpo del mensaje de correo, a la cuenta y con el asunto indicado.

Sub Enviar_Correo_Rango()

ActiveSheet.Range(“A1:G10”).Select
ActiveWorkbook.EnvelopeVisible = True

With ActiveSheet.MailEnvelope

.Introduction = “Texto de entrada para el cuerpo del mensaje.”
.Item.To = “cuentacorreo@cuentacorreo.com”
.Item.Subject = “Datos actualizados”
.Item.Send

End With

End Sub

ActiveSheet.Range(“A1:G10”) Rango deseado para incluir en el cuerpo del mensaje.
.Introduction Texto que acompaña al rango de los datos en el cuerpo del mensaje.
.Item.To Cuenta de correo electrónico del destinatario.
.Item.Subject Asunto del correo.

  

Nivel de dificultad: Experto VBA-Macros Excel Experto VBA – Macros

51 comentarios en “Enviar correo electrónico desde Excel

  • Buenas tardes. Tengo una hoja de cálculo que avisa 45 días antes de que se produzca un evento, poniendo una casilla determinada con fondo rojo. Pero necesitaría que enviara un correo a la persona o personas responsables del evento, con un texto determinado que podría incluir alguna casilla de la hoja. ¿Es posible?

    Muchas gracias

    Luis

      • Es similar mi duda. Quiero enviar un correo a partir de una condición en excel. Por ejemplo, tengo 3 columnas, 1. Con cantidades, 2. Con correos y 3. Pagado o No pagado. La rutina que quiero crear es que si en la columna 3 dice “No pagado” envíe correo con el contenido de la columna 1 al correo indicado en la columna 2. Ojalá puedas ayudarnos.

  • Hola, regularmente cuando hay un correo en el libro al seleccionarlo me abría de inmediato una pestaña del correo predeterminado para redactar y enviar.
    ¿Como puedo hacer para activar esta función?

    • Hola Nancy,

      Lo puedes realizar con hipervínculo.
      1. Ir a: Cinta de opciones / Pestaña: Insertar / Grupo: Vínculos / Hipervínculos.
      2. Ir a: Vincular a / Clic sobre: Dirección de correo electrónico.
      3. Ir a: Dirección de correo electrónico / Escribir nuestra dirección como remitente.
      4. Ir a: Asunto / Escribir el asunto del correo.
      5. Pulsar el botón Aceptar.

      Al pulsar sobre el hipervínculo del correo, abrirá outlook o el programa predeterminado con el email y el asunto definido.

      Saludos.

  • Buenas tardes,

    teníamos un archivo de excel 2007 que al hacerle doble click, abría un mensaje nuevo de outlook con la tabla que contiene el fichero excel incrustada en el mensaje. El usuario borró el archivo y la copia por error… He estado buscando macros que hagan lo mismo pero no encuentro nada. Pueden ayudarme por favor??

    Muchas gracias de antemano.

    Saludos

    • Hola Xavi,

      Respecto a tus necesidades, faltaría información como: el doble clic donde se aplica, los datos se encuentran en tabla o en rango, etc.

      Hemos incluido en el post un nuevo apartado para enviar un rango de datos.

      Respecto al doble clic se puede aplicar al evento del libro: Workbook_SheetBeforeDoubleClick

      Saludos.

  • Buenas tardes, quisiera saber si es posible vincular el correo en Excel con una cuenta en Gmail la razón es porque tengo creada la Macro para enviar correos masivos pero a los usuarios con cuenta Gmail no se puede enviarles los correos. Que puedo hacer?

    • Hola Mateo,

      Enviar email desde Excel a una cuenta gmail, con macros no presenta ningún problema. Otra cosa es que la hoja tenga un hipervínculo a nuestra cuenta de gmail. En ese caso no hay solución ya que requiere conectarse a la URL con usuario y contraseña de destinatario.

      También puede estar limitado por el administrador del sistema.

      Saludos.

  • Buenas noches,
    He probado la macro para enviar rango y funciona bien. He probado otra similar y también funciona, sin embargo niguna de las que he probado envía el rango con el formato (color de texto, negrita, cursiva, bordes de celda, etc).
    Existe forma de enviar el mismo rango con el formato que tenga?.
    Gracias por la respuesta.
    Saludos

    • Hola Robert,

      El archivo se envía con formato de fuentes y celdas. La cuestión es que si el destinatario recibe los correos como texto sin formato o rtf, en lugar de tipo html (configuración del correo). No mostrará los formatos y sólo el texto.

      Saludos.

  • Buenas noches,
    Quisiera saber como hacer que la macro “ENVIAR HOJA1”, se pudiese adaptar para el envio a varias direcciones de correo.
    Gracias y saludos

  • Buenos dias,
    Tengo un caso similar al que menciona Luis arriba. Tengo una hoja de cálculo para registrar permisos temporales de diferentes usuarios, en la hoja se registra nombre, departamento asignado, fecha de caducidad y correo electronico.
    Necesitaria que se enviara un correo electronico automaticamente 1 mes antes de que caduque el permiso. De modo que coja el correo destinatario de la propia hoja excel.
    Muchas gracias,
    Ignacio

  • He probado la d enviar la hoja 1 del archivo y no lo envia se ejecuta la macros parpadea y no llega el coreo a que se puede atribuir este error?

  • hola esta muy buenas las macros al respecto a las de rango de celdas, puedo manejar las direcciones de correo desde la hoja de una celda

  • Hola buenas me deja enviar el correo perfectamente desde excel, lo único que no puedo es que lo envie con copia a otros destinatarios hay alguna forma de hacer esto.

    Muchas Gracias

    • Hola Eric,

      Hay que reemplazar

      Recipients:=”cuentacorreo@cuentacorreo.com”

      por

      Recipients:=”cuentacorreo1@cuentacorreo.com;cuentacorreo2@cuentacorreo.com;cuentacorreo3@cuentacorreo.com”

      Saludos

  • Buenas tardes
    Cuando corro la macro, al final, antes de que envie el correo, me aparece el cuadro de error de excel diciendo que ha para do trabajar. Si restauro, me envia el correo, pero me obliga a reiniciar el excel. Como puedo hacer para qeu no me aparezca el cuadro de error que me obliga a cerrar el excel.
    Gracias

  • ya probe el enviar rango y me funciona bien. pero se puede hacer una macros que al escribir una palabra especifica en alguna celda se active la macros y envie el rango por correo.

    y como lo puedo aplicar a varios rangos en filas.

  • Hola excelente aporte, me gustaría saber como enviar el rango deseado del ultimo registro ingresado; es decir cada vez que se ingrese nueva información al ejecutar la macro envíe solamente los datos de la nueva fila agregada.

    Muchas gracias por compartir sus conociemientos

    Atentamente

    José

  • Hola primero que todo, es excelente la información. Les solicito que por favor me ayuden con lo siguiente: tengo que ir enviando datos de la planilla a varios remitentes, pero individualmente. ¿cómo puedo hacer para colocar el correo electrónico del destinatario en una celda de la planilla y que la macro lea ese correo para enviarlo

  • hola, uso el código y me funciona pero solo para un correo, puse los correos como aparece mas abajo y no se me envía a ninguno.

  • COMO PUEDO ENVIAR UNA HOJA CON UN GRAFICO EN EL CUERPO DEL MESAJE, COMO UNA IMAGEN, ESTO TAMBIEN LO PUEDO ENVIAR POR WHATSAPP?

  • Hola amigos…. La macro me funcionó perfecto, pero con hoja desprotegida. Lo que necesito es, ya que la planilla es para otros usuarios, y debo protegerla con clave para que sufra modificaciones, que se pueda enviar el mail con esta misma macro pero con hoja protegida. He intentado varios trucos pero no hay caso.

    Favor si alguien me puede ayudar con algún truco al respecto.

    Muchas gracias!!

  • Hola, yo utilizo el siguiente comando para enviar correo con Outlook desde una macro de Excel
    Set outApp = CreateObject(“Outlook.Application”)
    Mi consulta es como puedo usar este comando para enviar correo con Zimbra (cliente externo de correo)
    Gracias

    • Hola Yelson,

      Deberás de indicar la ruta
      Dim como secuencia ZimbraPath
      ZimbraPath = “C: \ Archivos de programa \ Zimbra \ Zimbra Desktop \ win32 \ prisma \ zdclient. exe ”

      Pero deberás de revisar las especificaciones de Zimbra.

      Saludos.

  • Hola, en primer lugar gracias por esta aportación.

    Tengo dos consultas:
    1. Sobre el rango seleccionado. Has explicado como enviar un correo siempre que coja el rango A1:G10 ¿pero cómo debería hacerlo si quiere que el rango se adapte a las celdas donde haya texto? Por ejemplo, en algunas ocasiones puede ser A1:G12 y otras A1:H10.

    2. El destinario del correo quiero que lo coja a partir de una lista desplegable.

    Muchas gracias.

  • Buenos días.

    Ante todo muchas gracias por el aporte.
    Es posible agregarle al código de “Enviar Libro Excel” un código para el cuerpo del correo?? Ya que solo lleva el asunto y destinatario

  • Hola, buenas tarde
    Primero agradecer tus buenos aportes y segundo consultar por el envío de un link en el cuerpo del correo. Probé con la instrucción “.Item.Body” y funciona muy bien para enviar mensajes escritos, pero no he podido lograr que envíe la dirección de una página web.
    Muchas gracias de nuevo, saludos,
    Mauricio

  • Buenas tardes;
    la macro me corre bien hasta que llega a la linea de “With ActiveSheet.MailEnvelope” y me deja el cuerpo del correo abierto para llenar los destinatarios y la introducción ¿Como arreglar este problema? Muchas gracias.

Deja un comentario

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