VBA Excel bestand opslaan als PDF, printen en mailen

Status
Niet open voor verdere reacties.

RogerJordi

Gebruiker
Lid geworden
21 mrt 2019
Berichten
19
Goedemiddag allemaal,

Recent een macro aangemaakt voor een Excel bestand waar ik mee werk en dit werkt prima! Deze macro voert de volgende activiteiten uit: PDF bestand maken met een titel op basis van celwaarden en wordt uiteindelijk geprint. De code ziet er als volgt uit:

Code:
Sub PDF()
'
' PDF Macro
'

'
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        "G:\Algemeen\Orders\PDF\" & Range("K12") & " " & Range("D7") & " " & Range("D23") & " " & Range("C16") & " " & Range("C21") & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
'
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, Collate:=True, _
        IgnorePrintAreas:=False
    
End Sub

Dit proces bevalt me prima, echter zou ik het ook graag automatisch willen mailen. Nu heb ik meerdere macro's gevonden met bepaalde coderingen hiervoor, echter weet ik niet of het mogelijk is om deze coderingen hierop kunnen te aansluiten. Oftewel het zojuist gemaakte / uitgeprinte PDF bestand direct te mailen als bijlage. Nu ben ik benieuwd of dit mogelijk is en hoe ik dit zou moeten aanpakken.

Zou me enorm helpen!

Met vriendelijke groet,

Roger
 
Hoi Edmoor,

Bedankt voor je reactie

Code:
Sub Send_Mail()
    Dim PDFnaam As String
    Dim OutApp As Object
    Dim OutMail As Object
    Dim strbody As String
    
    PDFnaam = ThisWorkbook.Path & "\" & Split(ThisWorkbook.Name, ".")(UBound(Split(ThisWorkbook.Name, ".")) - 1) & ".pdf"
    ActiveWorkbook.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=PDFnaam
        
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    strbody = "Hoi!" & vbNewLine & vbNewLine & _
              "Dit is regel 1" & vbNewLine & _
              "Dit is regel 2" & vbNewLine & _
              "Dit is regel 3" & vbNewLine & _
              "Dit is regel 4"

    With OutMail
        .To = "edmoor@helpmij.nl"
        .CC = ""
        .BCC = ""
        .Subject = "Het onderwerp"
        .Body = strbody
        .Attachments.Add PDFnaam
        .Display   'Of gebruik .Send
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing

End Sub

Alleen weet ik niet hoe ik dit kan koppelen aan het zojuist aangemaakte PDF bestand van mijn eigen macro.
 
Probeer het zo eens:
Code:
Sub Send_Mail()
    Dim PDFnaam As String
    Dim OutApp As Object
    Dim OutMail As Object
    
    PDFnaam = "G:\Algemeen\Orders\PDF\" & _
        Range("K12") & " " & _
        Range("D7") & " " & _
        Range("D23") & " " & _
        Range("C16") & " " & _
        Range("C21") & ".pdf"
    
    ActiveWorkbook.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:=PDFnaam, _
        OpenAfterPublish:=True [COLOR="#008000"]'Of False om het document niet te openen[/COLOR]
    
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
        Collate:=True, _
        IgnorePrintAreas:=False
        
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)

    With OutMail
        .To = "edmoor@helpmij.nl"
        .CC = ""
        .BCC = ""
        .Subject = "Het onderwerp"
        .Body = "Het bericht"
        .Attachments.Add PDFnaam
        .Display   [COLOR="#008000"]'Of gebruik .Send[/COLOR]
    End With

    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub
 
Laatst bewerkt:
Oh Edmoor, voor subject wil ik dezelfde naam gebruiken als het bestandsnaam, kan dit eenvoudig door bijvoorbeeld = PDFnaam of moet ik dezelfde soort codering gebruiken als het maken van een pdf bestand?
 
Daar kan je dan inderdaad gewoon .Subject = PDFnaam gebruiken.
 
Hopelijk de laatste vraag voor nu:

Code:
 With OutMail
        .To = Range("D10").Value
        .CC = ""
        .BCC = ""
        .Subject = Range("K12").Value & " " & _
              Range("D7").Value & " " & _
              Range("D23").Value & " " & _
              Range("C16").Value & " - " & _
              Range("C21").Value
        .Body = strbody
        .Attachments.Add PDFnaam
        .Display   'Of gebruik .Send
    End With

Nu wil ik mijn handtekening toevoegen (die standaard wordt gebruikt bij outlook).


Code:
 .Body = strbody
 .Signature = True
        .Attachments.Add PDFnaam
        .Display   'Of gebruik .Send
    End With

zo krijg ik een fout melding :(
 
De standaard handtekening in Outlook is een HTML bestand waardoor er anders mee moet worden omgegaan.
En is dat alleen tekst? Of ook een plaatje of logo?
 
ik heb nu:

Code:
.HTMLBody = "<br>" & .HTMLBody

Met .Display naar boven, echter lukt het mij nog niet om mijn oude body te koppelen met de handtekening.

Of alles staat opeens in 1 regel terwijl ik gebruik maak van vbNewline... met uiteindelijk de handtekening eronder
 
Code:
  strbody = "Dear" & " " & Range("D8") & "," & vbNewLine & vbNewLine & _
              "Please find attached the order for the delivery from" & " " & Range("C16") & " " & "to" & " " & Range("C21") & "." & vbNewLine & _
              "For " & Range("D23")"

    With OutMail
        .Display
        .To = Range("D10").Value
        .CC = ""
        .BCC = ""
        .Subject = Range("K12").Value & " " & _
              Range("D7").Value & " " & _
              Range("D23").Value & " " & _
              Range("C16").Value & " - " & _
              Range("C21").Value
        .HTMLBody = strbody & "<br>" & .HTMLBody
        .Attachments.Add PDFnaam
    End With
 
Dat is niet voldoende en vbNewLine gaat in HTML niet werken.
Zoals ik al zei is de handtekening een HTML bestand en die moet worden geïntegreerd.
Daarnaast dient er een speciale voorziening te worden gemaakt om dat plaatje te kunnen tonen.

Ik wil daar best voor je naar kijken maar om het dan goed te doen heb ik dat HTML bestand met de handtekening en het betreffende plaatje nodig.
Als je me die wilt mailen is het dus niet openbaar en kan ik het wel voor je in orde maken.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan