VBA Access-Outlook para enviar un adjunto pdf en correo con formato HTML

Como siempre agradeceros la ayuda. Tengo un formulario en el que, tras una comprobación de pago ejecutado, pulsando un botón se debe ejecutar un código que haga lo siguiente:

Exportar una factura en pdf (hecho) / Enviar un e-mail al destinatario de la factura con el informe en pdf adjunto, con un pie de firma en HTML (por resolver) / Dejar la casilla de "facturado" en "Sí" (hecho). Después de muchas pruebas y mucho investigar por las redes y los foros tengo 2 botones que ejecutan los siguientes códigos por separado, pero no soy capaz de unirlos (debido a mi desconocimiento de vba, lógicamente). El primer código envía el mensaje con el archivo adjunto, pero el cuerpo del mensaje es texto plano. El segundo código envía el mensaje con formato HTML pero no adjunta la factura. ¿Alguna idea de cómo fusionar los dos códigos para poder enviar la factura correspondiente y que el cuerpo del mensaje sea en formato HTML?

La página no me permite insertar el código, me dice "demasiadas letras seguidas sin espacios", si alguno puede responder espero poder insertarlo en mi siguiente respuesta, perdonad las molestias.

2 Respuestas

Respuesta
1

Disculpad aunque esté vulnerando las normas, pero no me permite añadir el código que necesito resolver. El primer código es este:

Private Sub Comando116_Click()
DoCmd.RunMacro "ExportarFacturapdf"
    On Error Resume Next
    DoCmd.OpenReport "FacturaAdministracionNuevo", acViewReport, , "NumeroFactura='" & Me.NumeroFactura & "'", acHidden
    sExistingReportName = "FacturaAdministracionNuevo"
    DoCmd.OpenReport sExistingReportName, acViewPreview, , , acHidden
    sAttachmentName = NumeroFactura & ". " & ClienteFiscal & ". " & TituloFactura
    Reports(sExistingReportName).Caption = sAttachmentName
    Dim e As String
    e = DLookup("email1", "clientes", "clientefiscal='" & Me.ClienteFiscal & "'")
    DoCmd.SendObject acSendReport, sExistingReportName, acFormatPDF, "" & e & "", , , "Envío Factura honorarios administración inmueble en alquiler", , True
    DoCmd.Close acReport, sExistingReportName
Forms!ControlRentasIndividualyFacturación!Facturaenviada.Value = -1
Forms!ControlRentasIndividualyFacturación!Cerrar2.SetFocus
End Sub

Con él puedo enviar el correo con el adjunto en pdf, pero el cuerpo del mensaje es texto plano.

Private Sub Comando117_Click()
Dim vDest As String        'Variable con el valor del campo Mail
Dim Olk As Outlook.Application
Set Olk = CreateObject("Outlook.Application")
vDest = Nz(Me.Email1.Value, "")
'Creamos un nuevo mensaje de Outlook
Dim OlkMsg As Outlook.MailItem
Set OlkMsg = Olk.CreateItem(olMailItem)
'Creamos la información del mail
With OlkMsg
    'Definimos los elementos del mail
    Dim OlkDestinatario As Outlook.Recipient            'Destinatario
    Set OlkDestinatario = .Recipients.Add(vDest)
    OlkDestinatario.type = olTo
        .Subject = "Envío Factura Honorarios administración inmueble en alquiler"                'Asunto
        .HTMLBody = "<HTML> " & _
                "<BODY>" & _
                    "<P>" & "<IMG SRC = '\\Despacho\gdpdata\PRODUCCION\FACTURAS\VARIOS\CuerpoEmail.jpg'>" & "</P>" & _
                "</BODY> " & _
                "</HTML>"
    .Display
End With
'Eliminamos la instancia
Set Olk = Nothing
Set OlkMsg = Nothing
Set OlkDestinatario = Nothing
End Sub

y con este puedo enviar el correo de manera correcta en formato HTML, pero no me adjunta el archivo en pdf.

La idea es poder hacer una fusión de ambos de manera que pueda enviar el correo al cliente, con su factura correspondiente y en un formato HTML para poder añadir un pie de firma que lleva el logotipo de mi empresa.

Respuesta
1

Desconozco si esta respuesta llega a tiempo, pero en vista de que quedo atras, aun no siendo mi especialidad Outlook, intentare dar una solucion.

Se tienen que añadir unas líneas para crear la sección y darle contenido: los adjuntos

El adjunto ha de existir (se puede crear, enviar y borrar en tiempo de ejecución) y si es una factura se puede reutilizar el mismo nombre y la misma carpeta (pero eso lo dejo a tu elección), sea con una variable o con una constante: el archivo tiene que existir de forma previa.

En esta parte :

'Creamos un nuevo mensaje de Outlook
Dim OlkMsg As Outlook.MailItem
Set OlkMsg = Olk.CreateItem(olMailItem)

Añadimos las nuevas líneas

'Creamos un nuevo mensaje de Outlook
Dim OlkMsg As Outlook.MailItem
Dim OlkAdjunto As Outlook.Attachments 
Set OlkMsg = Olk.CreateItem(olMailItem)
Set OlkAdjunto = OlkMsg.Attachments
OlkAdjunto.Add "C:\Archivos\Factura.pdf" (o una variable con la ruta absoluta)

Gracias Enrique. Disculpa que no haya contestado antes (imposible por trabajo).

El archivo que hay que adjuntar se genera al pinchar en el botón, ya que cada cliente tiene una factura concreta cada mes por servicios de administración de inmuebles. Si no me equivoco estas líneas del primer código son las que crean el pdf para posteriormente adjuntarlo

 On Error Resume Next
    DoCmd.OpenReport "FacturaAdministracionNuevo", acViewReport, , "NumeroFactura='" & Me.NumeroFactura & "'", acHidden
    sExistingReportName = "FacturaAdministracionNuevo"
    DoCmd.OpenReport sExistingReportName, acViewPreview, , , acHidden
    sAttachmentName = NumeroFactura & ". " & ClienteFiscal & ". " & TituloFactura
    Reports(sExistingReportName).Caption = sAttachmentName

De ahí que mi intención (ilusa quizás...) fuera hacer una mezcla de ambos códigos.

No puedes hacer mezclas porque en que envía los PDF los crea en tiempo de ejecución (y no los guarda), Outlook necesita que al crear el correo-e, el documento exista (digamos que 'de forma física').

Hay bastantes ejemplos de como crear PDFs, vale cualquiera de ellos y solo se precisa recordar su ubicación para poder enviarlo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas