Email versturen via Excel (ook als PDF)

Het is mogelijk om vanuit Excel een e-mail te versturen. Dit wordt hieronder uitgelegd op verschillende manieren, kies er een uit die handig is voor het gebruik van jouw wensen.

Emails versturen via Excel is alleen mogelijk als er ook Microsoft Office Outlook geïnstalleerd is. Wat eigenlijk logisch is omdat het beide Office programma’s zijn. Als afzender wordt je standaard email adres in Outlook gebruikt.

Vooraf is het handig om te weten hoe je het Ontwikkelaars tabblad krijgt en hoe je een macro toevoegt.

Email versturen

Als je een gewone email wilt versturen vanuit Excel dan kan je deze macro gebruiken.
Vergeet niet om in onderstaande code het e-mail adres te wijzigen!

Open de VBA editor, sneltoets ALT + F11, en maak daar een nieuwe Module aan. Plak daar de volgende code:
Sub Email()
Err.Number = 0
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then
Set OutApp = CreateObject("Outlook.Application")
Err.Clear
End If
On Error GoTo 0
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "info@excelweb.nl"
.CC = ""
.BCC = ""
.Subject = "Verstuur email via Excel"
.HTMLBody = "Het is gelukt"
.Send
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub

Werkblad als PDF meesturen

Open de VBA editor, sneltoets ALT + F11, en maak daar een nieuwe Module aan.
Plak daar de volgende code:
Vergeet ook hier niet om in onderstaande code het e-mail adres te wijzigen!

Sub PDFEmail()
Pad = "Z:\VCB\Financiele administratie\Facturen\VCB\"
For Each sh In ThisWorkbook.Sheets
If sh.Name <> "Voorblad" Then
If Dir(Pad & sh.Name & ".pdf") <> "" Then
MsgBox "Het bestand: " & sh.Name & ".pdf bestaat reeds"
Else
sh.ExportAsFixedFormat 0, Pad & sh.Name, , , , , OpenAfterPublish:=False
Err.Number = 0
On Error Resume Next
Set OutApp = GetObject(, "Outlook.Application")
If Err.Number > 0 Then
Set OutApp = CreateObject("Outlook.Application")
Err.Clear
End If
On Error GoTo 0
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "info@excelweb.nl"
.CC = ""
.BCC = ""
.Subject = "Verstuur email via Excel"
.HTMLBody = "Het is gelukt!"
.Attachments.Add Pad & sh.Name & ".pdf"
.Send
End With
Set OutMail = Nothing
Set OutApp = Nothing
End If
End If
Next sh
End Sub

Vervolgens gaan we hier een ActiveX besturingselement voor aanmaken.

Ga op het lint naar het tabblad Ontwikkelaars, selecteer hier Invoegen en kies voor knop.
Koppel hier de zojuist aangemaakte module PDFEmail aan.

8 replies on “Email versturen via Excel (ook als PDF)”

  • Goedenavond,
    Ik heb een macro geknutseld om vanuit excel een PDF te versturen .
    Maar loop tegen het volgende probleem aan: In de body van de mail kom een aanhef en een bericht dat de “factuur als bijlage is toegevoegd” Nu wil ik mij handtekening plaatsen ( is een png bestand) maar dit krijg ik niet voor elkaar. Of de handtekening komt in de mail of de aanhef komt in de mail . Aanhef en handtekening krijg ik niet gezamenlijk in de mail. Alvast bedankt voor de aandacht

    P.Timmerman
    • Om een handtekening (een PNG) toe te voegen aan de e-mail body in de macro, kunnen we gebruikmaken van het HTML-formaat van de e-mailbody.
      We kunnen een HTML-afbeeldingstag gebruiken om de handtekening in te sluiten in de e-mailtekst. Hier is de aangepaste code:

      Sub Email()
      Err.Number = 0
      On Error Resume Next
      Set OutApp = GetObject(, “Outlook.Application”)
      If Err.Number > 0 Then
      Set OutApp = CreateObject(“Outlook.Application”)
      Err.Clear
      End If
      On Error GoTo 0
      OutApp.Session.Logon
      Set OutMail = OutApp.CreateItem(0)

      ‘ Pad naar de PNG-handtekening. Pas dit pad aan naar jouw bestand.
      Dim signaturePath As String
      signaturePath = “C:\Pad\Naar\Handtekening.png”

      With OutMail
      .To = “info@excelweb.nl”
      .CC = “”
      .BCC = “”
      .Subject = “Verstuur email via Excel”

      ‘ Definieer de e-mail body in HTML-formaat met de handtekening
      .HTMLBody = “Beste,

      ” & _
      “Hierbij ontvangt u de factuur als bijlage. ” & _
      “Bij vragen kunt u contact met mij opnemen.

      ” & _
      “Met vriendelijke groet,

      ” & _
      Handtekening

      .Send
      End With

      Set OutMail = Nothing
      Set OutApp = Nothing
      End Sub

      Zorg ervoor dat je het juiste pad naar de PNG-handtekening opgeeft in de variabele signaturePath. Pas ook de e-mailbody aan naar jouw behoeften.

      Deze code voegt de handtekening toe onder de “Met vriendelijke groet” regel in de e-mail. De handtekening wordt weergegeven als een afbeelding onderaan de e-mail.

      Joost Administrator
  • Goedenavond,

    Is bovenstaand ook mogelijk met een andere mailclient dan outlook. Ik gebruik spark en vraag me af hoe ik deze kan aanroepen vanuit excel

    Albert Hulleman
    • Ja, het is mogelijk.
      In plaats van de Outlook-objecten te gebruiken, kun je gebruikmaken van de SMTP-server van je e-mailprovider om e-mails te versturen.
      Hier is een voorbeeld van hoe je dit kunt doen met de Spark mailclient:

      Sub EmailViaSpark()
      Dim iMsg As Object
      Dim iConf As Object
      Dim Flds As Object

      ‘ Create the email object
      Set iMsg = CreateObject(“CDO.Message”)
      Set iConf = CreateObject(“CDO.Configuration”)
      Set Flds = iConf.Fields

      ‘ Set up the email configuration
      With Flds
      .Item(“http://schemas.microsoft.com/cdo/configuration/sendusing”) = 2 ‘Send using SMTP
      .Item(“http://schemas.microsoft.com/cdo/configuration/smtpserver”) = “your_smtp_server” ‘SMTP server address
      .Item(“http://schemas.microsoft.com/cdo/configuration/smtpserverport”) = 587 ‘SMTP server port (usually 587 for TLS/STARTTLS)
      .Item(“http://schemas.microsoft.com/cdo/configuration/smtpauthenticate”) = 1 ‘SMTP authentication enabled
      .Item(“http://schemas.microsoft.com/cdo/configuration/sendusername”) = “your_email@example.com” ‘Your email address
      .Item(“http://schemas.microsoft.com/cdo/configuration/sendpassword”) = “your_email_password” ‘Your email password
      .Item(“http://schemas.microsoft.com/cdo/configuration/smtpusessl”) = True ‘Use SSL for secure connection
      .Update
      End With

      ‘ Create the email message
      With iMsg
      .To = “recipient@example.com” ‘Recipient email address
      .CC = “”
      .BCC = “”
      .Subject = “Verstuur email via Excel”
      .HTMLBody = “Het is gelukt”
      .From = “your_email@example.com” ‘Your email address
      .Sender = “your_email@example.com” ‘Your email address
      .Configuration = iConf
      .Send
      End With

      ‘ Clean up
      Set iMsg = Nothing
      Set iConf = Nothing
      Set Flds = Nothing
      End Sub

      In dit voorbeeld vervang je `”your_smtp_server”`, `”your_email@example.com”` en `”your_email_password”` met de juiste gegevens van jouw e-mailprovider.
      Pas deze waarden aan in de code om de e-mail via Spark te versturen.

      Zorg ervoor dat je de juiste SMTP-server, poort en authenticatiemethoden gebruikt die door jouw e-mailprovider worden vereist. Het gebruik van een SMTP-server vereist vaak authenticatie met je e-mailadres en wachtwoord.

      Joost Administrator
  • ik heb een macro aangemaakt maar er gaat iets fout met het aanmaken van de pdf waardoor hij niet gaat mailen. wat moet ik daar invullen of waar moet ik naar verwijzen?

    ‘ Prepare e-mail
    .Subject = “Dagafsluiting ” & Format(Now(), “dd-MM-yyyy”)
    .To = “l” ‘ <– Put email of the recipient here
    .CC = "" ' <– Put email of 'copy to' recipient here
    .Body = "Goedendag," & vbLf & vbLf _
    & "Hierbij ontvang je de dagafsluiting van " & Range("b1") & "." & vbLf & vbLf & vbLf _
    & "Vriendelijke groet," & vbLf & vbLf _
    & "Team " & Range("b1") & "." & vbLf & vbLf
    .Attachments.Add PdfFile = "Dagafsluiting " & Format(Now(), "dd-MM-yyyy") & ".pdf"

    antoinette
    • Nadat het PDF-bestand is aangemaakt, kun je de e-mail verzenden met de bijlage. Hier is hoe je de e-mailcode kunt aanvullen:

      ‘ Prepare e-mail
      Dim OutlookApp As Object
      Dim Mail As Object

      Set OutlookApp = CreateObject(“Outlook.Application”)
      Set Mail = OutlookApp.CreateItem(0)

      With Mail
      .Subject = “Dagafsluiting ” & Format(Now(), “dd-MM-yyyy”)
      .To = “ontvanger@example.com” ‘ Vervang dit door het e-mailadres van de ontvanger
      .CC = “” ‘ Vervang dit door het e-mailadres van de ‘copy to’ ontvanger (optioneel)
      .Body = “Goedendag,” & vbLf & vbLf & “Hierbij ontvang je de dagafsluiting van ” & Range(“B1”).Value & “.” & vbLf & vbLf & vbLf & “Vriendelijke groet,” & vbLf & vbLf & “Team ” & Range(“B1”).Value & “.” & vbLf & vbLf
      .Attachments.Add PdfFile ‘ Voeg het PDF-bestand toe als bijlage
      .Send ‘ Verzend de e-mail
      End With

      ‘ Opruimen
      Set OutlookApp = Nothing
      Set Mail = Nothing

      In deze code wordt een Outlook-e-mailitem aangemaakt, onderwerpregel, ontvanger, inhoud en bijlage worden ingesteld en de e-mail wordt verzonden met de .Send-methode.

      Zorg ervoor dat je de juiste e-mailadressen vervangt in de .To en .CC eigenschappen van het e-mailobject.
      Ook moet de variabele PdfFile de juiste padnaam bevatten van het PDF-bestand dat je hebt gemaakt.

      Zorg ervoor dat Outlook geopend is op het moment dat je deze code uitvoert, anders kunnen er fouten optreden bij het maken of verzenden van de e-mail.
      Succes!

      Joost Administrator
  • is het ook mogelijk om vanuit excel een verjaardagsmail te sturen naar personen die jarig zijn? De lijst bevat name, mailadressen en geboortedata. Kan dat alleen vanuit Outlook, of ook vanuit Mail?

    Frits 't Hart
    • Je kunt VBA (Visual Basic for Applications) gebruiken om een macro te schrijven die de lijst doorloopt, de geboortedata controleert en automatisch e-mails verstuurt naar de jarigen.
      Hierbij moet je ervoor zorgen dat je toegang hebt tot de e-mailclient (Outlook of Mail) en de juiste rechten hebt om e-mails te verzenden.

      Sub Verjaardagsmail()

      Dim OutApp As Object
      Dim OutMail As Object
      Dim rng As Range
      Dim cell As Range

      ‘ Stel de referentie in naar de e-mailsheet in Excel
      Set rng = Sheets(“E-mailsheet”).Range(“A2:C10”) ‘ Pas dit aan naar de juiste celbereik en bladnaam

      ‘ Maak een instantie van Outlook
      Set OutApp = CreateObject(“Outlook.Application”)

      ‘ Loop door de rijen in de Excel-sheet
      For Each cell In rng.Rows
      ‘ Controleer of de verjaardag vandaag is
      If DateValue(cell.Offset(0, 2).Value) = Date Then
      ‘ Maak een nieuw e-mailbericht aan
      Set OutMail = OutApp.CreateItem(0)
      With OutMail
      ‘ Stel de ontvanger in
      .To = cell.Offset(0, 1).Value
      ‘ Stel het onderwerp in
      .Subject = “Fijne verjaardag!”
      ‘ Stel de inhoud van het bericht in
      .Body = “Beste ” & cell.Value & “,

      Fijne verjaardag!”
      ‘ Voeg een PDF-bijlage toe (optioneel)
      ‘.Attachments.Add “C:\pad\naar\je\PDF\bestand.pdf”
      ‘ Verstuur het bericht
      .Send
      End With
      ‘ Verwijder het e-mailobject
      Set OutMail = Nothing
      End If
      Next cell

      ‘ Maak de Outlook-applicatie los
      Set OutApp = Nothing

      End Sub

      Dit is wel een basisvoorbeeld en kun je aanpassen aan je specifieke situatie en Excel-bestand.
      Zorg er ook voor dat de macro wordt uitgevoerd met de nodige machtigingen om e-mails te verzenden.
      Succes!

      Joost Administrator

Leave a Comment

Je e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *