▷ Macro para enviar correos Gmail desde Excel - Practica y Aprende

Macro para enviar correos Gmail desde Excel

Te ha pasado, que quieres enviar un simple correo, pero tienes que hacer los mismos pasos siempre?

A que me refiero?

Los siguientes pasos te son familiares?

  • Abrir tu navegador (Chrome, Firefox, Edge).
  • Entrar a la web de Gmail.
  • Iniciar sesión(o mantener la sesión iniciada! ahorrando tiempo 😄)
  • Luego dar Click en redactar correo.
  • Digitar el destinatario.
  • Digitar el asunto y el mensaje
  • Y por ultimo enviar el mensaje!
  • Nah, mejoremos este proceso 👇

Pueden ser pasos sencillos, pero No lo considero algo práctico cuando necesitamos enviar un correo simple como un recordatorio, o una reunión, o lo que necesites.

Por eso, en esta ocasión te quiero mostrar una forma para poder enviar emails de Gmail desde Excel.

¿QUIERES DESCARGAR EL EJEMPLO?

En el siguiente link puedes descargar el archivo con el código listo funcional, si tienes alguna duda o sugerencia para mejorar el código, simplemente coméntame en el formulario de Contacto

Para descargar el archivo utilizado es necesario estar registrado. Acá Puedes Registrarte y si ya estas registrado puedes ingresar a tu cuenta de usuario.


Si quieres ver una alternativa para enviar correos pero desde Google Sheets puedes ver este artículo. 

CONFIGURAR EL ENTORNO

Adicionar un módulo en Excel

si has visto los otros artículos en esta página esto ya lo sabes, insertar un nuevo modulo en Excel.

Adicionar Modulo en Excel - Enviar gmail desde excel - practicaprende
Adicionar Modulo en Excel – Enviar gmail desde excel – practicaprende

Adicionar Referencia «Microsoft CDO for windows 2000 library»

Luego necesitamos la referencia «Microsoft CDO for windows 2000 library«, esta es necesaria precisamente para utilizar las funciones de envío de correo.

Adicionar referencia - Enviar gmail desde excel - practicaprende
Adicionar referencia Microsoft CDO for Windows 2000 Library - practicaprende

Generar contraseña en Gmail

Esto es lo mas raro, pero a la ves sencillo, Google ya no permite colocar tu contraseña personal de Gmail en Aplicaciones de Terceros, como en este caso de Excel.

Si ya sabes generar una contraseña de Gmail para aplicaciones de Terceros omite estos 3 pasos.

Para esto necesitamos generar una contraseña de tu cuenta de Gmail, NO significa cambiar la contraseña, significa generar una «contraseña de la aplicación«. veamos

Paso 1: Ir a la pagina web de Seguridad de Google

Dirigete a https://myaccount.google.com/security, selecciona la sección «Contraseñas de Aplicaciones«

Aplicaciones de Terceros en Google - Generar Contraseña - practicaprende

Paso 2: Seleccionar Aplicación

En este paso debes seleccionar en la lista de «Seleccionar Aplicación» el que dice «Otra«, luego debes digitar la aplicacion que va a utilizar la contraseña, en este caso «Excel»

Contraseñas de aplicaciones Paso 0- practicaprende
Contraseñas de aplicaciones Paso 1- practicaprende
Contraseñas de aplicaciones Paso 3- practicaprende

Paso 3: Copiar la contraseña y colocarla en Excel

Luego de generar la Contraseña, debes copiarla y colocarla en el Código en Excel, esta es la contraseña que Excel va a utilizar, y es como si fuera tu contraseña personal, asi que NO la compartas.

Contraseñas de aplicaciones Paso 4- practicaprende
Contraseñas de aplicaciones Paso 5- practicaprende

ADICIONAR CODIGO PARA ENVIAR GMAIL DESDE EXCEL

Adicionar Código

El siguiente código es el que debes ingresar en el módulo que adicionaste en pasos anteriores.

Contraseñas de aplicaciones Paso 6- practicaprende

Lo que hace es adicionar la lógica para enviar un correo desde Excel con una cuenta de Gmail, veamos.

Sub enviar_correo()    
    Dim Email As CDO.Message
    Set Email = New CDO.Message
    correo = "tucorreo@gmail.com"
    passwd = "bulyssaadgssvrvu" 'Contraseña Generada por Gmail
    
    destino = "correodestino@gmail.com"
    asunto = "asunto del correo"
    cuerpo = "menssaje del correo"
    
    Email.Configuration.Fields(cdoSMTPServer) = "smtp.gmail.com"
    Email.Configuration.Fields(cdoSendUsingMethod) = 2
    With Email.Configuration.Fields
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = CLng(465)
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = Abs(1)
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout") = 30
        .Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = correo
        .Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = passwd
        .Item("http://schemas.microsoft.com/cdo/configuration/smtpusessl") = True
    End With
    With Email
        .To = destino
        .From = correo
        .Subject = asunto
        .TextBody = cuerpo
        .Configuration.Fields.Update
        .Send
    End With
End Sub

Luego adicionar un Botón para ejecutar la función «enviar_correo()«.

Adicionar Botón en Excel

Esto ya lo sabrás, pero lo adiciono acá para dejar el ejemplo completo.

Adicionar Macro de Enviar correo al Boton

Luego damos clic derecho al botón y asignamos la macro enviar_correo().

Asignar Macro de Enviar Correo a Boton - practicaprende
Adicionar Macro de Enviar Correo a Boton - practicaprende

Y listo! estos serian los pasos para enviar un correo muy básico y nada dinámico desde Excel. Está totalmente funcional…

Aunque también podrías programar una macro para que se ejecuta a una hora determinada.

Pero…

Lo que queremos, es que sea más dinámico y útil para ti, vamos a modificarlo un poco.


MEJORAR LOS PARAMETROS DEL ENVIO DE CORREO

Destinatario, asunto y mensaje dinámico

Primero necesitamos dejar esos 3 campos: destinatario, asunto y mensaje que los capture desde celdas, para eso hacemos lo siguiente:

Sub enviar_correo()    

    '...El resto de código

    destino = Range("A2").Value
    asunto = Range("B2").Value
    cuerpo = Range("C2").Value

    '...El resto de código

End Sub
Campos destinatario asunto mensaje - practicaprende

Adicionar Mensaje de Error o Confirmación

Claro, por que no, debemos colocar un mensaje de confirmación en caso de que sea exitoso el envío, o de error si no se ha podido enviar el correo. Realizo la explicación dentro del código.

Sub enviar_correo()   
 
    '...El resto de código

    With Email
        .To = destino
        .From = correo
        .Subject = asunto
        .TextBody = cuerpo
        .Configuration.Fields.update
        On Error Resume Next ' Adicionamos esta linea para que no se detenga el código en caso de error
        .Send
    End With

    'Adicionamos las siguientes lineas de código
    'identificando si hay o no error para mostrar un mensaje condicionado
    If Err.Number = 0 Then
        MsgBox "El mail se envió con éxito" & vbNewLine & vbNewLine & _
        "Destino: " & destino & vbNewLine & _
        "Asunto: " & asunto & vbNewLine & _
        "Mensaje: " & cuerpo, vbInformation, "Informe"
    Else
        Error = InputBox("Se ha generado un error. " & Err.Description & " Error N°:" & Err.Number, , config)
        MsgBox "Se produjo el siguiente error: " & Err.Description, vbCritical, "Error nro " & Err.Number
    End If
End Sub
Mensaje exitoso de envio de gmail en excel

Adicionar Archivos Adjuntos

Si, también podemos enviar un correo desde Excel con Archivos adjuntos, esta característica personalmente la he utilizado bastante.

Lo único que necesitamos es identificar la ruta del archivo o preguntarle al usuario donde se encuentra el archivo(para hacerlo mas dinámico).

También podemos adjuntar más de un archivo, para esto necesitamos hacer un ciclo de los archivos seleccionados y adjuntarlos al correo.

Por ultimo tambien podemos preguntarle al usuario donde esta el archivo.

Veamos las 3 opciones.

Opción 1: Adicionar 1 solo archivo Adjunto por ruta Directa

El mas sencillo, para esto lo único que necesitamos es adicionar una linea de código con la ruta del archivo que queremos adjuntar.

Sub enviar_correo()    

    '...El resto de código

    With Email
        .To = destino
        .From = correo
        .Subject = asunto
        .TextBody = cuerpo
        .AddAttachment ("C:\Users\Cristhian\Desktop\Imagen de Excel.png")'Aca adicionamos la ruta del archivo a adjuntar
        .Configuration.Fields.Update
        On Error Resume Next ' Adicionamos esta linea para que no se detenga el código en caso de error
        .Send
    End With

    '...El resto de código

End Sub

Opción 2: Adicionar 2 o mas archivos Adjuntos por ruta directa

Es simplemente lo mismo que la Opción 1, pero adicionando mas veces la linea de código, veamos

Sub enviar_correo()   
 
    '...El resto de código

    With Email
        .To = destino
        .From = correo
        .Subject = asunto
        .TextBody = cuerpo
        .AddAttachment ("C:\Users\Cristhian\Desktop\Imagen de Excel.png")
        .AddAttachment ("C:\Users\Cristhian\Desktop\Imagen de Excel2.png")
        .AddAttachment ("C:\Users\Cristhian\Desktop\Imagen de Excel3.png")
        .Configuration.Fields.Update
        On Error Resume Next ' Adicionamos esta linea para que no se detenga el código en caso de error
        .Send
    End With

    '...El resto de código

End Sub

Opción 3: Preguntar al usuario la ruta del archivo

Esta es un poco mas compleja, pero básicamente hacemos uso del asistente para buscar un archivo en el pc. veamos el código.

Sub enviar_correo()    

    '...El resto de código

    Dim filesDialog As FileDialog
    Set filesDialog = Application.FileDialog(msoFileDialogFilePicker)
    'Asistente para seleccionar archivos

    filesDialog.Title = "Selecciona los archivos" 'Titulo de la ventana modal
    filesDialog.AllowMultiSelect = True 'Permitir seleccionar varios archivos
    If filesDialog.Show <> -1 Then Exit Sub 'Si no seleccionamos nada entonces cancelamos
        
    With Email
        .To = destino
        .From = correo
        .Subject = asunto
        .TextBody = cuerpo
        For i = 1 To filesDialog.SelectedItems.Count'Ciclo para adjuntar los archivos seleccionados
            .AddAttachment (filesDialog.SelectedItems(i))
        Next i
        .Configuration.Fields.Update
        On Error Resume Next ' Adicionamos esta linea para que no se detenga el código en caso de error
        .Send
    End With

    '...El resto de código

End Sub

CONCLUSION

Ya aprendiste como enviar correos de Gmail directamente desde Excel, ya te queda a ti personalizarlo para adaptarlo a tus necesidades.

✅ Puedes también revisar nuestro artículo donde puedes enviar correos desde Google Sheets

Puedes adaptarlo por ejemplo para:

  • Programar el envío de un correo (como programar una función?)
  • Adicionar un botón en la Cinta de Opciones de Excel(Asi es como lo tengo yo).
  • Enviar muchos correos automatizados.

Si quieres ver mas ejemplos que tenemos visita nuestro Blog

Espero te guste!

Saludos!

Si te ha gustado el contenido puedes invitarme un café!


DESCARGAR EJEMPLO

En el siguiente link puedes descargar un sencillo ejemplo, Si tienes alguna duda o sugerencia para mejorar el código, simplemente comenta en el formulario de Contacto

Para descargar el archivo utilizado es necesario estar registrado. Acá Puedes Registrarte y si ya estas registrado puedes ingresar a tu cuenta de usuario.

32 comentarios en «Macro para enviar correos Gmail desde Excel»

  1. Buenos días,

    Muy agradecido con el aporte del código que nos has dejado. Sin embargo, tenía una duda. Básicamente tengo el mismo código, pero lo que estoy agregando es que la función principal es la de adjuntar la hoja activa y enviarla por correo, creando esta última como un archivo temporal. En ese sentido, la variable que me está ocasionando problemas es la de la dirección del archivo . Te adjunto mi código y muchas gracias de antemano.

    Sub enviar_correo()

    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    Application.EnableEvents = False
    ActiveSheet.DisplayPageBreaks = False

    Dim Email As CDO.Message
    Set Email = New CDO.Message
    correo = «tucorreo@gmail.com»
    passwd = «xxxxx»

    ‘PRUEBA

    Dim NombreArchivo As String
    Dim RutaTemporal As String

    On Error Resume Next

    If NombreArchivo = «» Then NombreArchivo = ActiveSheet.Name

    RutaTemporal = VBA.Environ(«temp») & «\»
    NombreArchivo = RutaTemporal & NombreArchivo & «.xlsx»
    Rutafinal = NombreArchivo ‘Esta es la que está ocasionando problemas.

    ActiveWorkbook.ActiveSheet.Copy
    Application.DisplayAlerts = False
    ActiveWorkbook.SaveAs NombreArchivo
    Application.DisplayAlerts = True

    destino = «sergio.lopez@pucp.pe»
    asunto = «Reporte de Pago e Ingreso de Fruta»

    Email.Configuration.Fields(cdoSMTPServer) = «smtp.gmail.com»
    Email.Configuration.Fields(cdoSendUsingMethod) = 2
    With Email.Configuration.Fields
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpserverport») = CLng(465)
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = Abs(1)
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout») = 30
    .Item(«http://schemas.microsoft.com/cdo/configuration/sendusername») = correo
    .Item(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = passwd
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True
    End With
    With Email
    .To = destino
    .From = correo
    .Subject = asunto
    .TextBody = cuerpo
    .AddAttachment (Rutafinal)
    .Configuration.Fields.Update
    .Send

    End With

    ActiveWorkbook.Close False
    VBA.Kill NombreArchivo

    On Error GoTo 0

    Application.ScreenUpdating = True
    Application.Calculation = xlCalculationAutomatic
    Application.EnableEvents = True
    ActiveSheet.DisplayPageBreaks = False
    Application.CutCopyMode = False
    End Sub

    Responder
    • Hola buen dia.
      Como puedo anexar en los correos mas correos ya que solo me envia la selda A2 pero los demas que estan hacia abajo no me los envia, podrian apoyarme de favor

      5621181842 les dejo mi whats

      Responder
  2. Muchas gracias, me sirvio de mucho para lo que necesitaba, consulta en caso de enviar en el cuerpo de mensaje un Rango de selección de celdas, como se podría hacer?

    Responder
  3. Consulta.. el código me quedó así:

    Sub enviar_correo()
    Dim Email As CDO.Message
    Set Email = New CDO.Message
    Correo = «comprobantesded@gmail.com»
    passwd = «iobcpqcuirgdvozz» ‘Contraseña generada por Google(Ver Articulo https://practicaprende.com/12)

    destino = Range(«+’SERVICIO M3′!(J12:J999)»).Value ‘Capturamos los datos desde celdas
    Asunto = Range(«+’DATOS!(A34)»).Value ‘Capturamos los datos desde celdas
    cuerpo = Range(«+’DATOS!(A26:A32)»).Value ‘Capturamos los datos desde celdas

    Email.Configuration.Fields(cdoSMTPServer) = «smtp.gmail.com»
    Email.Configuration.Fields(cdoSendUsingMethod) = 2
    With Email.Configuration.Fields
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpserverport») = CLng(465)
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = Abs(1)
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout») = 30
    .Item(«http://schemas.microsoft.com/cdo/configuration/sendusername») = Correo
    .Item(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = passwd
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True
    End With
    With Email
    .To = destino
    .From = Correo
    .Subject = Asunto
    .TextBody = cuerpo
    .Configuration.Fields.Update
    .Send
    End With
    End Sub
    End Sub

    Pero me arroja un Error de compilación
    No se ha definido el tipo definido por el usuario
    y me deja seleccionado el «Email As CDO.Message» y el color amarillo de error en «Sub enviar_correo()

    Como lo puedo solucionar?

    Responder
  4. Hola,

    Alguien sabe como añadir una imagen en el body? he tratado haciéndolo con HTML pero no me carga, asumo que debe ser por que la imagen está local.

    Responder
    • Hola Paul! Gracias por escribir!

      Intenta reemplazando el .TextBody por .HTMLBody, ya que este último si acepta el formato de HTML.

      De igual forma lo que comentas es cierto, si tienes la imagen en local no te funciona, ya que al enviarlo por correo debe poderse cargar desde Gmail, y por ende necesitas una ruta publica para mostrar una imagen por HTML.

      Intentalo y me cuentas! un saludo! 👍

      Responder
  5. Alguien ha logrado agregar una imagen en el body? lo he intentado con HTML y me sale nulo, cuando lo reviso veo que pasa por un proxy y se altera la referencia.

    Responder
    • Hola Paul! te escribí en el otro comentario, intenta poner la ruta de la imagen que no sea en local, me refiero que la imagen tenga un link publico!

      Un saludo!

      Responder
  6. ¿Como se puede hacer para enviar un correo de manera masiva y con archivos locales?, me base bastante en el tutorial de Outlook y trato de combinar un poco de esto, con un poco de lo de Gmail. se que son 2 plataformas distintas y usan conexiones diferentes, pero me gustaria que leyera mi plantilla tal y como la de outlook pero para gmail dejo mi codigo como referencia

    Sub enviar_correo()
    Dim Email As CDO.Message
    Set Email = New CDO.Message
    Dim Base As Worksheet
    Correo = «correo@correo.com»
    passwd = «*****»

    For i = 2 To Range(«A» & Rows.Count).End(xlUp).Row

    Ruta = «C:\ruta del archivo»
    File = Base.Range(«E» & i).Value
    Extension = Base.Range(«F» & i).Value
    Adjunto = Ruta & «\» & File & Extension

    destino = Range(«B» & i).Value
    asunto = Range(«C» & i).Value
    cuerpo = Range(«D» & i).Value

    Email.Configuration.Fields(cdoSMTPServer) = «smtp.gmail.com»
    Email.Configuration.Fields(cdoSendUsingMethod) = 2
    With Email.Configuration.Fields
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpserverport») = CLng(465)
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpauthenticate») = Abs(1)
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpconnectiontimeout») = 30
    .Item(«http://schemas.microsoft.com/cdo/configuration/sendusername») = Correo
    .Item(«http://schemas.microsoft.com/cdo/configuration/sendpassword») = passwd
    .Item(«http://schemas.microsoft.com/cdo/configuration/smtpusessl») = True
    End With

    With Email
    .To = destino
    .From = Correo
    .Subject = asunto
    .TextBody = cuerpo
    .Attachments.Add (Adjunto)
    .Configuration.Fields.Update
    On Error Resume Next
    .Send

    End With

    If Err.Number = 0 Then
    MsgBox «El mail se envió con éxito» & vbNewLine & vbNewLine & _
    «Destino: » & destino & vbNewLine & _
    «Asunto: » & asunto & vbNewLine & _
    «Mensaje: » & cuerpo, vbInformation, «Informe»
    Else
    MsgBox «Se produjo el siguiente error: » & vbNewLine & vbNewLine & Err.Description, vbCritical, «Error nro » & Err.Number
    End If

    End Sub

    Responder
    • Claudio!

      Gracias por escribir, voy a tener en cuenta esta sugerencia y dado caso actualizo el articulo o creo uno nuevo!

      Un saludo!👍

      Responder
  7. me agradaria saber que debo agregar si quisera dejar el correo guardado como borrador y luego poder verificarlo para enviarlo manualmenyte, gracias saludos

    Responder
  8. me gusto el aporte y aprendi algo de comoligar la cuenta. pero ahora bien todo funciona genial de este tutorial. mi duda es como podria modificarlo para enviar masivos. tengo una lista de 3489 correos para enviar una carta invitacion de un curso.
    quiero enviarlos todos… quedo a la orden.
    muchas gracias!

    Responder
    • Luis! gracias por comentar!

      Mi sugerencia en este caso es que utilices una herramienta externa a Excel ya que Gmail puede bloquear tu cuenta al enviar demasiados correos ya que Gmail considera esto como spam, te sugiero páginas como mailchimp, allí cargas esos correos y haces un envío masivo con un formato especifico.

      Un saludo! 👍

      Responder
    • Duglas!!

      Si el crackeo lo realiza la extensión no creo que sea necesario adicionar nada a la macro, aunque la verdad desconozco la extensión para darte una mejor respuesta a este crackeo de emails.

      Un saludo y me hubiera gustado poder ayudarte mas. 👍

      Responder
  9. Hola, este artículo me enseñó todo lo que nunca aprendí, soy contadora de programación sé poco, pero quisiera saber como modificar la macro para que no solo pueda enviar los datos de la línea 1 sino colocar un listado de correos hacia abajo y que pueda tomarme en cuenta todos en ellos y que por cada línea me deje seleccionar un archivo para enviar. Ya Intenté colocando en esta parte así como un rango de lectura, pero claro no me lo acepta.

    destino = Range(«A2:A20»).Value ‘Capturamos los datos desde celdas
    asunto = Range(«B2:20»).Value ‘Capturamos los datos desde celdas
    cuerpo = Range(«C2:20»).Value ‘Capturamos los datos desde celdas

    agradezco su ayuda.

    Responder
    • Un saludo Ilse! Gracias por comentar!

      Para lograr enviar el correo a manera de lista sería necesario hacer un ciclo que recorra los correos y así mismo valla enviándolos y por otro lado sería obtener el archivo que quisieras enviar basado en una ruta pero en una nueva columna, en este caso sería utilizar la columna D, para que en cada fila cargue la información a enviar y obtenga la ruta de la columna D el archivo a enviar.

      Me han pedido eso varias personas, voy a ir trabajando en esta opción y dado caso actualizar este artículo para enviar a múltiples correos y si quieres escríbeme por acá tu correo y una vez lo tenga te lo envío.

      Un saludo!! 😁

      Responder
      • Hola Cristhian, a la que excelente tu ayuda y apoyo si mi correo es imzartllams151218@gmail.com

        yo antes usaba pero este en outlook y me dejaba hacer el listado de correos y a cada fila trazar una ruta para que adjuntara un archivo, pero la verdad no lo pude adaptar..

        Sub Send_Files()
        ‘Working in 2000-2010
        Dim OutApp As Object
        Dim OutMail As Object
        Dim sh As Worksheet
        Dim cell As Range, FileCell As Range, rng As Range, cellcc As Range

        With Application
        .EnableEvents = False
        .ScreenUpdating = False
        End With

        Set sh = Sheets(«SendFiles»)

        Set OutApp = CreateObject(«Outlook.Application»)

        For Each cell In sh.Columns(«B»).Cells.SpecialCells(xlCellTypeConstants)
        ‘cellcc = sh.Columns(«C»).Cells.SpecialCells(xlCellTypeConstants)

        ‘Enter the file names in the C:Z column in each row
        Set rng = sh.Cells(cell.Row, 1).Range(«D1:M1»)

        If cell.Value Like «?*@?*.?*» And _
        Application.WorksheetFunction.CountA(rng) > 0 Then
        Set OutMail = OutApp.CreateItem(0)

        With OutMail
        .To = cell.Value
        .cc = cell.Offset(0, 1).Value
        .Subject = «Notificación Aplicación de Multa por incumplimiento Contrato, » & cell.Offset(0, 11).Value
        .body = «Estimado Socio (a), » & cell.Offset(0, -1).Value & » inmobiliaria ….. le notifica que de acuerdo con su contrato,de no presentar la(s) cerficación(es) de venta(s) pendiente(s) según carta adjunta, se estará procediendo a facturar la multa en los próximos dias. Saludos cordiales. »
        .ReadReceiptRequested = True
        .OriginatorDeliveryReportRequested = True

        For Each FileCell In rng.SpecialCells(xlCellTypeConstants)
        If Trim(FileCell) «» Then
        If Dir(FileCell.Value) «» Then
        .Attachments.Add FileCell.Value
        End If
        End If
        Next FileCell
        ‘.send ‘
        .display ‘Or use Send
        End With

        Set OutMail = Nothing
        End If
        Next cell

        Set OutApp = Nothing
        With Application
        .EnableEvents = True
        .ScreenUpdating = True
        End With
        End Sub

        Responder
  10. Cuando se declara la instrucción
    With NewMail
    .From = «xxx»
    .To = «xxx»
    .CC = «»
    .BCC = «»
    .subject = «Demo Spreadsheet Attached»
    .TextBody = «Let me know if you have questions about the attached spreadsheet!»
    .Attachments.Add = mAttachment
    End With
    Da el error 438. Object does not support this property or method.
    Cuando se anula la línea de Attachmente, funciona correctamente.
    Tampoco funciona cuando se escribe Add.Attachement o terminado en s
    Tampoco con AddAttachment
    Tiene alguna respuesta?

    Responder
    • Hola Jose! Un saludo!

      Intenta de nuevo con .AddAttachment, este funciona bien en la medida que la ruta exista. La ruta por ejemplo sería:

      C:\Users\Cristhian\Downloads\Documento.docx

      Revisa que la ruta tenga esos backSlash(\) y que también tenga la extensión del archivo para que el código la pueda encontrar y así mismo enviarlo.

      Intenta tambien para las pruebas poner la ruta directa en el codigo me refiero algo como:

      .AddAttachment(«C:\Users\Cristhian\Downloads\Documento.docx»)

      Esto para ver que tome bien la ruta, ya si esto funciona cambiar el texto por la celda que necesitas.

      Me cuentas que tal te fue y si necesitas algo mas!

      Un saludo! 😉

      Responder
  11. Hola,

    cuando enviaba correos por Outlook al final en lugar de .Send usaba .Display para que me mostrara los correos y darles una última revisión antes de enviarlos, pero para este caso que se corre para Gmail no esta disponible, me indica error 438, ¿existe una instrucción similar para este caso?

    Responder
  12. Hola odigo excelente aunque tuve que luchar muchopara mis versiones de cliente de mail. Pero se me creo un problema inadvertido con consecuencias catastróficas. Envio a una lista de clientes a cada uno con un adjunto distinto. Y resulta que el AddAttachment me los fue añadiendo a cada cliente de suerte que al .ultimo le llegaron los adjuntos correspondientes a todos los demás. Error mio por no haber completado las pruebas peroproblema hasta ahora insoluble para mi. Si aguuien tiene una solución lo agradeceria mucho.

    Responder
  13. Hola, muchas gracias por este código.

    Cuando intento utilizarlo me muestra el siguiente error:

    «Error de transporte en la conexión al servidor».

    Si alguien tiene una idea de qué puede estar mal les agradecería su ayuda.

    Gracias

    Responder

Deja un comentario