Excel Avanzado

Macros, Vba en Excel y muchos ejemplos de nuestro Curso de Excel Avanzado

Excel Avanzado

Enviar archivo adjunto en Email con VBA

| 62 comentarios

Mediante esta función VBA podemos realizar varias funciones como  enviar como archivo adjunto

Podemos realizar nuestro envió a nuestro correo deseado, con solo presionar

una tecla.

ejemplo:

correo2

(Para mayor visualización de la imagen, hacer click en la misma)

se crea una conexión con el gestor deseado y se especifica los correos a utilizar pueden ser mediante el Outlook, yahoo, Gmail, Hotmail según como se desee.

se define el destinatario, la copia y la copia oculta, especificando los campos usados.

según ejemplo:

correo1

(Para mayor visualización de la imagen, hacer click en la misma)

se coloca un botón para hacer mas rápido del envió del correo.

una forma rápida de enviar nuestros correos sin dificultad

Correos

62 comentarios

  1. buenas tardes chicos,

    queria preguntar sobre un error que me esta sucediento en un documento que tengo para enviar correos desde excel, les explico, los campos para a quien va dirigido, la copia el asunto y el adjunto corren bien en la macro el correo se envia bien, solo el problema esta en el cuerpo del mensaje debido a que si en el campo seleciono una sola celda si se anexa al correo ej.:

    CÓDIGO:
    .Body = Range("B8").Value

    pero cuando seleciono varias celdas del rango se envia el cuerpo del mensaje en blanco ej.:

    CÓDIGO:
    .Body = Range("B8:C25").Value

    anexo los codigos completos

    con una sola celda:
    CÓDIGO:
    Sub OutlookMailExcelAdjunto()
    Dim OutApp As Object
    Dim OutMail As Object
    'Se crea la conexión con el gestor de correo
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.logon
    'Se crea metodo de envio de correo
    Set OutMail = OutApp.CreateItem(0)
    ActiveWorkbook.Save
    'Se definen el destinatario, la copia y la copia oculta, el asunto
    On Error Resume Next
    With OutMail
    .To = Range("B4").Value
    .CC = Range("B5").Value
    .BCC = Range("B6").Value
    'el cuerpo del correo y los archivos adjuntos si se requiere.Especificando
    'los campos usados.
    .Subject = Range("B7").Value
    .Body = Range("B8").Value
    .Attachments.Add Range("B26").Value
    .Send
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
    End Sub

    con mas de una celda:

    CÓDIGO:

    Sub OutlookMailExcelAdjunto()
    Dim OutApp As Object
    Dim OutMail As Object
    'Se crea la conexión con el gestor de correo
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.logon
    'Se crea metodo de envio de correo
    Set OutMail = OutApp.CreateItem(0)
    ActiveWorkbook.Save
    'Se definen el destinatario, la copia y la copia oculta, el asunto
    On Error Resume Next
    With OutMail
    .To = Range("B4").Value
    .CC = Range("B5").Value
    .BCC = Range("B6").Value
    'el cuerpo del correo y los archivos adjuntos si se requiere.Especificando
    'los campos usados.
    .Subject = Range("B7").Value
    .Body = Range("B8:C25").Value
    .Attachments.Add Range("B26").Value
    .Send
    End With
    On Error GoTo 0

    Set OutMail = Nothing
    Set OutApp = Nothing
    End Sub

    • Concatena todo en una sola celda y después en el cuerpo del mensaje solo haz referencia a esa celda

      • O concatena las celdas en el mismo body:
        .Body = Range("i1").Value & Range("i2").Value & ...

    • Es mas sencillo si seleccionas los rangos que quieres, das copiar, y después de la linea de attachments, en lugar de poner .send, pones .display, después de esa linea pon estas:

      DoEvents
      Application.SendKeys "^v"
      DoEvents

      y esa linea pegara lo que tienes seleccionado para copiar

  2. Hola, excelente codigo me sirvió perfectamente solamente tengo una pregunta como agrego firma al correo electronica con imgaenes de la empresa? Es decir, la firma que esta adjunta a un correo desde el outlook

    Mil gracias ojala pudieras contestarme y sea afortunada. GRACIAS

  3. me dice no se encuentra la ruta del archivo, he verificado y la ruta esta correcta, gracias

  4. Hola, excelente la página. Funciona de forma perfecta el código. Solamente quisiera saber si hay alguna forma de que envíe el mail sin oprimir "Enviar" en Outlook. Lo que hace ahora es prepararlo y quedar esperando que oprima Enviar... Gracias.

  5. Si alguien le sirve para poder enviar 2 archivos lo único que agregue a la macro fue lo siguiente:
    .Attachments.Add Range("B9").Value
    .Attachments.Add Range("B10").Value

    de esta forma coloco las rutas en esas 2 celdas y así pude adjuntar 2 archivos.

  6. Hola

    Espero puedan ayudarme con lo siguiente:

    Tengo un archivo de Excel en mi pagina, es un formato sencillo para registrarse a un evento. Lo que quiero es, que los usuarios lo descarguen, llenen, presionen un botón de enviar y automáticamente se adjunte a un correo electrónico y se pueda enviar.

    Gracias de antemano. un saludo.

  7. La macro funciona correctamente, pero solamente cuando tengo abierto el outlook. Como puedo hacer para que se envié la información con el outlook cerrado?

  8. hola que tal quisiera saber si podrían ayudarme en la realización de una macro para mandar correos en os días de cumpleaños de los trabajadores de una empresa, pero lo que quiero es que se envíen en el dia y mes correcto y con el nombre del trabajador a su correo
    espero puedan ayudarme

  9. hola, quisiera saber como hago para enviar un mail a varios destinatarios los cuales los tengo en un rango en el libro que tengo abierto

    Workbooks("valoracion-43").Activate
    'se envia a los correos correspondientes
    para =
    cc = correo.Range("cc").Value

    Subject = "Control de valoración a corte " & dia & " de " & mess & " del " & año & "."
    body = "Adjuntamos el resultado de las inconsistencias evidenciadas en el control de valoración al corte " & dia & " de " & mess & " del " & año & "."
    Set olApp = CreateObject("Outlook.Application")
    Set olMail = olApp.CreateItem(0)

    With olMail
    .to = Range("para").Value
    .cc = Range("cc").Value
    .Subject = Subject
    .DISPLAY
    FIRMA = olMail.HTMLbody
    .HTMLbody = "Buen día," & body & FIRMA & ""
    .Attachments.Add "G:\RIESGOS\SARM\Control de Valoración" & "\" & año & "\" & mes & "\" & dia & "\" & "Control.pdf"
    End With

    • Tienes que separar por ; como lo haces en outlook, por decir:

      .to = Range(“A1”).Value & ";" & Range(“A2”).Value

      y así sucesivamente

      • Amigos buenos días.

        Necesito una ayuda, elaboré una macro que me permite enviar correos masivos dependiendo del comportamiento de una celda, me funciona muy bien, pero si un destinatario se repite, envía tantos correos como celdas cumplan con la condición y lo que requiero yo es que se envíe un solo correo por destinatario con tantas filas se repitan, por ejemplo,

        Fila 1 = 10101 Perro AA@xxx.com
        Fila 2 = 10102 Gato AA@xxx.com
        Fila 3 = 10111 Pollo AA@xxx.com
        Fila 4 = 10108 Pez BBBBB@xxx.com
        Fila 5 = 10105 Ave BBBBB@xxx.com

        Es decir que sean dos correos nada más.

        AA@xxx.com
        Fila 1 = 10101 Perro
        Fila 2 = 10102 Gato
        Fila 3 = 10111 Pollo

        BBBBB@xxx.com
        Fila 4 = 10108 Pez
        Fila 5 = 10105 Ave

        De ante mano muchas gracias por la ayuda que me puedan prestar.

        Saludos desde Venezuela.
        William Solorzano

        • de casualidad tendras tu codigo

  10. como puedo hacer para enviarlo desde una cuenta gmail hacia una cuenta gmail sin utilizar outlook solo gmail

  11. Estimados, les consulto, he estado usando este código sin problema. Ahora me sale un error -2147467259 en tiempo de ejecución. Necesitamos saber a quien enviar esto, asegurese de introducir a menos un nombre".....ahora bien, yo tengo introducidos nombres y de hecho el correo cuando lo pruebo llega pero sale ese error y me deja la macro suspendida....Agradezco si alguien me puede ayudar a descubrir que está pasando. Marina

    Sub EnviarEmail()
    '
    ' Declaramos variables
    '
    Dim OutlookApp As Outlook.Application
    Dim MItem As Outlook.MailItem
    Dim cell As Range
    Dim Asunto As String
    Dim Correo As String
    Dim Destinatario As String
    Dim Saldo As String
    Dim Msg As String
    '
    Set OutlookApp = New Outlook.Application
    '
    'Recorremos la columna EMAIL
    '
    For Each cell In Range("B11:B118")
    '
    'Asignamos valor a las variables
    '
    Asunto = "Feedbak"
    Destinatario = cell.Offset(0, -1).Value
    Correo = cell.Value
    Saldo = Format(cell.Offset(0, 1).Value, "0.0%")
    Variacion = Format(cell.Offset(0, 2).Value, "0.0%")
    ADJUNTO = "C:\Users\......docx"
    'Cuerpo del mensaje
    '
    Msg = "Estimado ....."
    '
    Msg = Msg & "Sin otro particular y a la espera de seguir contando con su participación, saludamos muy atentamente." & vbNewLine & vbNewLine
    '
    ' "
    ' Msg = Msg & "a fin de relevar los datos para el mes entrante. Atentamente." & vbNewLine
    Msg = Msg & " Dpto. Estadísticas"
    '
    Set MItem = OutlookApp.CreateItem(olMailItem)
    With MItem
    .To = Correo
    '.cc = Range("E5")
    .Subject = Asunto
    .body = Msg
    ' .Attachments.Add Range("A4").Value
    .Attachments.Add (ADJUNTO)
    .send
    'Body = Range(“i1”).Value & Range(“i2”).Value &...para varios mjes
    End With
    '
    Next
    '
    End Sub

  12. Logro enviar correos, pero cuando quiero agregar un archivo me envía el siguiente error

    "Se ha producido el error '-2147024893 (80070003)' en tiempo de ejecución: Error de Automatización"

    .Attachments.Add Range("l3").Value

  13. Muchas gracias me sirvió mucho tu información.

    Saludos.

  14. hola, por favor me pueden ayudar necesito un código para enviar un correo electrónico usando web mail no Outlook

    mil gracias por sus aportes me han servido un monto

  15. hola como puedo har para que se vea una imagen en el cuerpo del correo

  16. Si se quiere ocultar el emisor, como se debería hacer? que no aparezca nada o en su defecto un NOREPLY. Sldos y gracias

  17. Buenas tardes. el codigo me funciono correctamente el dia de ayer, hoy al realizar algunas adecuaciones al archivo para complementar y que ya quede lista la plantilla volvi a ejecutar la macro para realizar pruebas me muestra el mensaje enviado con exito pero en realidad no salen los mensajes. Que puede pasar.

    Sub correo()

    Dim outApp As Object
    Dim outmail As Object

    Set outApp = CreateObject("Outlook.Application")
    outApp.Session.logon
    Set outmail = outApp.createitem(0)

    ActiveWorkbook.Save

    On Error Resume Next

    With outmail
    .to = Range("B10").Value
    .CC = Range("B11").Value
    .Subject = Range("B12").Value
    .Body = Range("B13").Value
    .Attachments.Add Range("B14").Value
    .DeleteAfterSubmit = False
    .send
    End With

    MsgBox "Reporte Enviado con Éxito"

    On Error GoTo 0

    Set outmail = Nothing
    Set outApp = Nothing

    End Sub

  18. Hola a todos, Por favor su ayuda, tengo un archivo excel donde tengo que enviar por correo la información de un rango de celdas y a su vez enviar un un archivo adjunto, como se podría hacer para poder hacer las 2 cosas a la vez.

  19. Buenas tardes,
    El código me funciono perfectamente hasta ayer que cambie de versión de Excel, ahora estoy utilizando Excel 2013 y me da el siguiente error:

    "Se ha producido el error 2146959355 (80080005) en tiempo de ejecución: Error en la ejecución de servidor"

    Deja de correr en :
    ' Se crea la conexión con el gestor de correo
    Set OutApp = CreateObject("Outlook.Application")
    OutApp.Session.Logon

    Tengo habilitado en herramientas, referencias:
    - Microsoft Excel 15.0 Object Library
    - Microsoft Outlokk 15.0 Object Library

    ¿Alguien podría ayudarme?
    Muchas gracias.
    Saludos,

  20. Buen día.

    si quisiera enviar 10 correos con 2 archivos adjuntos en cada correo, que le tengo que cambiar a la macro?

    me podrías apoyar?

Página de comentarios 2 de 3
1 2 3

Deja una respuesta

Los campos requeridos estan marcados con *.