Macro para adjuntar un archivo a un correo de outlook ya creado

Tengo una macro que exporta un archivo desde excel en formato PDF y crea un correo nuevo en la aplicación outlook 2013 sin enviarlo.

Quisiera una macro que me exporte otra hoja del mismo libro en formato PDF y lo adjunte al correo ya creado, no se cual es la identificación que debo usar para el objeto ya que en la primera macro uso:

Dim nuevo
nuevo = CreateObject("Outlook.application")
Dim mensaje As Outlook.MailItem
Set nuevo = New Outlook.Application
Set mensaje = nuevo.CreateItem(olMailItem)
With mensaje
.To = ""
.Subject = "Archivo Adjunto"
.Attachments.Add ThisWorkbook.Path & "\archivo.pdf
.Display
End With

Quiero saber que usar en la segunda macro para que esa segunda hoja se adjunte a ese correo ya creado como segundo archivo.

Mi intención es crear un botón en cada hoja de excel para adjuntarla al correo que ya se haya creado, considerando que se exportan en formato PDF ya que no quiero enviar el archivo de excel, sin tener que enviar dos correos o adjuntar manualmente esa segunda hoja.

1

1 respuesta

Respuesta
1

H o l a  :

Lo más simple es que pongas los dos archivos al momento de ejecutar la macro.

Asigna la siguiente macro a tu botón que vas a poner en cada hoja:

Sub EnviarCorreo()
    nuevo = CreateObject("Outlook.application")
    Dim mensaje As Outlook.MailItem
    Set nuevo = New Outlook.Application
    Set mensaje = nuevo.CreateItem(olMailItem)
    '
    ruta = ThisWorkbook.Path & "\"
    nombre = ActiveSheet.Name & ".pdf"
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & nombre, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    '
    With mensaje
        .To = ""
        .Subject = "Archivo Adjunto"
        .Attachments.Add ruta & "archivo.pdf"
        .Attachments.Add ruta & nombre
        .Display
    End With
End Sub

Si quieres tener macros separadas, tienes que ejecutar la macro del segundo archivo desde la primera macro. Tendría la primera macro, que enviar como parámetro la variable mensaje, para que de esa forma la segunda macro sepa en cuál correo poner el segundo archivo. Te anexo el ejemplo para que veas cómo tendría que ser:

Sub Macro1()
    nuevo = CreateObject("Outlook.application")
    Dim mensaje As Outlook.MailItem
    Set nuevo = New Outlook.Application
    Set mensaje = nuevo.CreateItem(olMailItem)
    '
    ruta = ThisWorkbook.Path & "\"
    '
    With mensaje
        .To = ""
        .Subject = "Archivo Adjunto"
        .Attachments.Add ruta & "archivo.pdf"
        .Display
    End With
    Call PonerOtroArchivo(mensaje)
End Sub
'
Sub PonerOtroArchivo(mensaje)
'Por.Dante Amor
    With mensaje
        ruta = ThisWorkbook.Path & "\"
        nombre = ActiveSheet.Name & ".pdf"
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & nombre, _
            Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
        .Attachments.Add ruta & nombre
    End With
End Sub

La macro que tendrías que poner en el botón es la "macro1".


Te recomiendo que utilices la primera opción.


'S aludos. Dante Amor. Recuerda valorar la respuesta. G racias

Muchas gracias por responder, sin embargo tengo las siguientes condiciones respecto de este proyecto:

La primera hoja tiene un botón con la macro crear mail, con la cual sucede que se exporta y adjunta dicha hoja en un correo nuevo como explique antes, funciona de maravilla...

Ahora bien, la segunda hoja es un archivo que opcionalmente dependiendo del trabajo y criterio del usuario, se adjuntará o no al e-mail ya creado.

Para hacerlo de manera hipotética, supongamos que el primer archivo es un resumen de la cuenta de un cliente. (Siempre será obligatorio enviarla).

La segunda hoja, es un detalle pormenorizado de la misma, (Sólo es necesario para clientes con transacciones complejas)

Es por eso que pensaba si era posible que el usuario decidiera si se adjuntaba o no.

Podría funcionar colocar la misma macro en ambas hojas, pero en vez de una orden directa, lanzar un formulario que exporte ambos archivos y luego con dos checkbox que condicionen las hojas que se adjuntan al e-mail. es lo que estoy intentando por ahora aunque no es lo que realmente se necesita, sin embargo, lo ideal es que el usuario pueda trabajar las dos hojas de manera individual, o en su defecto:

Hay alguna macro que se pueda ejecutar desde excel para descartar un correo ya armado?, eso me permitiría que el usuario use la segunda hoja y si decide adjuntarla, descarte el primer correo ya montado de la primera hoja y cree uno nuevo adjuntando las dos hojas de trabajo...

Si no es posible yo lo entenderé XD

Gracias por la ayuda.

José Armando

Yo lo veo más simple.

En la hoja1 pon la macro que ya tienes, dices que ya funciona.

En la hoja2 pon la macro que yo te envié, es decir, la macro de la hoja2, si es ejecutada desde la hoja2, va a generar el archivo de la hoja1 y el archivo de la hoja2, y luego creará el correo con ambos archivos.

Por ejemplo, macro en la hoja2:

Sub EnviarCorreo()
    nuevo = CreateObject("Outlook.application")
    Dim mensaje As Outlook.MailItem
    Set nuevo = New Outlook.Application
    Set mensaje = nuevo.CreateItem(olMailItem)
    '
    ruta = ThisWorkbook.Path & "\"
    nombre = ActiveSheet.Name & ".pdf"
    nomb1 = "archivo.pdf"
    '
    'guarda hoja1
    Sheets("Hoja1").ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & nomb1, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ruta & nombre, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, OpenAfterPublish:=False
    '
    With mensaje
        .To = ""
        .Subject = "Archivo Adjunto"
        .Attachments.Add ruta & nomb1
        .Attachments.Add ruta & nombre
        .Display
    End With
End Sub

R ecuerda valorar la respuesta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas