Menu Sluiten

E-mail versturen met een macro

e-mail Macro

In dit artikel ga ik je laten zien hoe je vanuit Excel een e-mail kunt versturen met een macro. We behandelen hierbij alle mogelijke opties die je hierbij tot je beschikking hebt. Meesturen van bijlages, tonen van afbeeldingen. Het is allemaal mogelijk. Tenslotte laat ik je zien hoe je in een dynamische loop meerdere mails tegelijk kunt versturen. Daar zit namelijk pas echt de tijdsbesparing!

Eenvoudige e-mail versturen met een macro

Laten we eenvoudig beginnen met een enkele mail op te stellen die alleen tekst bevat. We hebben voor deze mail een aantal gegevens nodig namelijk:

  • De naam van de afzender (Deze is niet verplicht maar wel netjes om te gebruiken)
  • Het e-mail adres waar je naartoe wilt mailen
  • Moet er nog iemand in de CC?
  • Het onderwerp van de mail
  • Het emailbericht

Het is beter om deze gegevens niet hard in de code in te voeren. Het is beter om deze op je werkblad te plaatsen. Vanuit daar kun je de gegevens vervolgens weer uitlezen. Zo kun je op een later moment je geautomatiseerde mail compleet veranderen zonder dat je hiervoor nog je code hoeft aan te passen.

We beginnen de code door 2 objecten te declareren. De eerste is de outlook applicatie en de tweede is de e-mail die je gaat opstellen. Vervolgens worden de objecten aangemaakt en de set functie wordt gebruikt om het aangemaakt e-mail bericht toe te wijzen aan het object Outmail. Nu zorgen we ervoor dat de eigenschappen die nodig zijn voor de mail uitgelezen worden uit de cellen uit het werkblad die wij gevuld hebben. Nadat het mailbericht is aangemaakt schonen wij het geheugen door de beide objecten weer netjes leeg te maken.

Sub MailenMetEenMacro()
   

    Dim OutApp As Object
    Dim OutMail As Object
        
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
           
    With OutMail
            .SentOnBehalfOfName = ThisWorkbook.Sheets("Blad1").Range("C1")
            .To = ThisWorkbook.Sheets("Blad1").Range("C2")
            .CC = ThisWorkbook.Sheets("Blad1").Range("C3")
            .Subject = ThisWorkbook.Sheets("Blad1").Range("C4")
            .Body = ThisWorkbook.Sheets("Blad1").Range("C5")
            .Display
    End With
        

     
    Set OutMail = Nothing
    Set OutApp = Nothing
        
End Sub

Mocht het zijn dat de bovenstaande code niet werkt, kijk dan bij ‘Extra’ –> ‘verwijzingen’ in de VBA editor en probeer om de Microsoft Outlook library toe te voegen. Die zorgt ervoor dat Excel kan communiceren met Outlook.

Tekst structureren in een macro E-mail

Je hebt net gezien hoe eenvoudig het is om een outlook mail op te stellen vanuit Excel met behulp van een simpele macro. Laten we de mail nu iets complexer maken. Het e-mail bericht in het eerste voorbeeld bestond uit één regel tekst. In de praktijk bevatten e-mailberichten natuurlijk een stuk meer tekst. Indien je deze tekst allemaal in een cel plaatst komt de tekst als volgt naar voren in je mail.

Zoals je ziet is de tekst uit Cel C5 ongestructureerd achter elkaar geplaatst. Hier is een oplossing voor. Door de tekst op te splitsen in verschillende cellen kun je aangeven met de code ‘vbNewLine’ waar een nieuwe regel moet beginnen. Je kunt deze tekst op deze manier netjes structureren, opslaan in een variabele en deze variabele weer gebruiken als e-mail bericht. Je code en output komt er dan als volgt uit te zien.

Sub MailenMetEenMacro()
   
    Dim OutApp As Object
    Dim OutMail As Object
        
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    
    bericht = ThisWorkbook.Sheets("Blad1").Range("C5") & vbNewLine & ThisWorkbook.Sheets("Blad1").Range("C6") _
              & vbNewLine & ThisWorkbook.Sheets("Blad1").Range("C7") & vbNewLine _
              & ThisWorkbook.Sheets("Blad1").Range("C8")
              
    With OutMail
            .SentOnBehalfOfName = ThisWorkbook.Sheets("Blad1").Range("C1")
            .To = ThisWorkbook.Sheets("Blad1").Range("C2")
            .CC = ThisWorkbook.Sheets("Blad1").Range("C3")
            .Subject = ThisWorkbook.Sheets("Blad1").Range("C4")
            .Body = bericht
            .Display
    End With
        
    Set OutMail = Nothing
    Set OutApp = Nothing
        
End Sub


Mail met bijlage versturen met een macro

Een bijlage toevoegen aan een mail doen wij door .Attachments.Add (bijlage) in de with statement te plaatsen. Zorg dat je de bestandsnaam plus het volledige pad daar plaatst. 

Sub MailenMetEenMacro()
   
    Dim OutApp As Object
    Dim OutMail As Object
        
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    
    bericht = ThisWorkbook.Sheets("Blad1").Range("C5") & vbNewLine & ThisWorkbook.Sheets("Blad1").Range("C6") _
              & vbNewLine & ThisWorkbook.Sheets("Blad1").Range("C7") & vbNewLine _
              & ThisWorkbook.Sheets("Blad1").Range("C8")
    
    bijlage = "D:\VBA testen\mail bijlage.xlsx"
              
    With OutMail
            .SentOnBehalfOfName = ThisWorkbook.Sheets("Blad1").Range("C1")
            .To = ThisWorkbook.Sheets("Blad1").Range("C2")
            .CC = ThisWorkbook.Sheets("Blad1").Range("C3")
            .Subject = ThisWorkbook.Sheets("Blad1").Range("C4")
            .Body = bericht
            .Display
            .Attachments.Add (bijlage)
    End With
        
    Set OutMail = Nothing
    Set OutApp = Nothing
        
End Sub

Mails versturen in een loop

Stel je voor dat we de bovenstaande mail niet alleen naar Piet@hotmail.com, maar naar een distributielijst van 10 personen moeten versturen. Dan gaan wij natuurlijk niet het mailadres 10 keer aanpassen en vervolgens ook 10 keer de macro afspelen. We plaatsen dan de code hierboven in een For Next loop. We maken je code ook meteen dynamisch zodat hij ook nog werkt indien je de distributielijst aanpast. Stel de adressen in je lijst staan opgenomen vanaf cel C2.

Je code wordt dan:

Sub MailenMetEenMacro()
   
    Dim OutApp As Object
    Dim OutMail As Object
    
    EindeDistributielijst = ThisWorkbook.Sheets("Blad1").Range("B2").End(xlDown).Offset(-1).Row
        
    For i = 2 To EindeDistributielijst
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        
        bericht = ThisWorkbook.Sheets("Blad1").Range("C13") & vbNewLine & ThisWorkbook.Sheets("Blad1").Range("C14") _
                  & vbNewLine & ThisWorkbook.Sheets("Blad1").Range("C15") & vbNewLine _
                  & ThisWorkbook.Sheets("Blad1").Range("C16")
        
        bijlage = "D:\VBA testen\mail bijlage.xlsx"
                  
        With OutMail
                .SentOnBehalfOfName = ThisWorkbook.Sheets("Blad1").Range("C1")
                .to = ThisWorkbook.Sheets("Blad1").Range("C" & i)
                .Subject = ThisWorkbook.Sheets("Blad1").Range("C12")
                .Body = bericht
                .Attachments.Add (bijlage)
                .Send
        End With
            
        Set OutMail = Nothing
        Set OutApp = Nothing
    Next i
        
End Sub

Mails direct versturen met een macro

Je ziet dat ik in de bovenstaande code in de With statement geen ‘.Display’ gebruik maar ‘.Send’. Je zult dan geen outlook mail venster zien, maar de mails worden dan direct verstuurd. Als je meerdere mails in een loop wilt versturen lijkt het mij niet handig om nog op ‘Send’ te hoeven drukken bij elke individuele mail.

Handtekening inclusief afbeelding toevoegen aan e-mail

Stel je wilt bijvoorbeeld geautomatiseerd een handtekening toevoegen inclusief afbeelding. Dit kan handig zijn indien je bijvoorbeeld je bedrijfslogo in je handtekening wilt verwerken. Je kunt dit doen door de HTML code van  je handtekening uit te schrijven. Je kunt deze ook ophalen vanuit een HTML bestand.

Ik zal de laatste optie als voorbeeld voor je uitwerken:

Stel je hebt een html bestand waarin je handtekening in HTML code staat opgeslagen.

HTML code afbeelding

Met behulp van de onderstaande functie kun je de HTML code ophalen uit dit bestand:

Function LeesHTMLVanBestand(ByVal bestandspad As String) As String
    Dim fso As Object
    Dim txtFile As Object
    Dim tekst As String
    
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txtFile = fso.OpenTextFile(bestandspad, 1)
    
    tekst = txtFile.ReadAll
    
    txtFile.Close
    
    LeesHTMLVanBestand = tekst

    ' Maak geheugen vrij
    Set txtFile = Nothing
    Set fso = Nothing
End Function

Verwerk nu deze regel in je e-mail sub om de functie uit te voeren en de handtekening op te slaan in een variabele:

Dim HandtekeningHTML as string     
' Lees HTML-handtekening van bestand
    HandtekeningHTML = LeesHTMLVanBestand("C:\Users\Marti\OneDrive\Documenten\handtekening.html")

Tenslotte hoef je alleen nog deze variabele weer te plaatsen achter de recht van de inhoud van  ‘.HTMLBody’ binnen je with statement.

        With OutMail
                .SentOnBehalfOfName = ThisWorkbook.Sheets("Blad1").Range("C1")
                .to = ThisWorkbook.Sheets("Blad1").Range("C" & i)
                .Subject = ThisWorkbook.Sheets("Blad1").Range("C12")
                .HTMLBody = bericht & HandtekeningHTML
                .Attachments.Add (bijlage)
                .Send
        End With

Tenslotte heb ik nog een oplossing indien je een bulk aan e-mails wilt opstellen, maar je vindt het toch spannend om deze direct uit te sturen zonder deze te bekijken. Je kunt dit doen door zoals eerder uitgelegd de ‘.Display’ parameter te gebruiken. Je kunt dan vervolgens de aangemaakte mails bekijken. Het probleem is dan vervolgens dat je deze mails één voor één handmatig moet gaan verzenden. Dit laatste deel kun je met de onderstaande code ook automatiseren. Deze zorgt er namelijk voor dat alle openstaande outlook mails in een loop verzonden worden.

Sub SendOpenItems()
    Dim myOlApp As New Outlook.Application
    Dim myItem As Object
    
    For i = 1 To 1000
        On Error GoTo Einde
        Set inspectorgadget = myOlApp.ActiveInspector
        Set myItem = myOlApp.ActiveInspector.CurrentItem
        myItem.Send
    Next i
Einde:
End Sub

Heeft dit artikel je geholpen?

36 reacties

  1. MartinR

    Zeker weten. Je kunt bijvoorbeeld een tabel aanmaken met alle gegevens voor de verschillende e-mailberichten. In deze tabel plaats je dan ook een kolom waarin je dan het pad plus bestandsnaam en extensie in plaatst. Met een ‘for loop’ kun je dan door de regels in de tabel heen gaan. Als bijlage refereer je dan naar de cel in de aangemaakte kolom. Mocht je dit nog onduidelijk vinden dan kun je mij mailen op info@macroexcel.nl. Dan kan ik je verder helpen.
    Mvg,

    Martin

  2. Jan

    Beste, ik heb de code toegepast, de eenvoudigste, meer heb ik niet nodig, maar in plaats van display heb ik Send gebruikt en dan krijg ik een foutmelding. Display gaat goed, Send heeft fout.

    Aan wat zou dat kunnen liggen?

    Mvg
    JAn

  3. RobT

    Ik gebruik Thunderbird als email client. Is het ook mogelijk om ipv. ‘outlook.application’ een universele code toe te passen die de aanwezige geïnstalleerde email client gebruikt?

    • MartinR

      Hoi Rob,

      Thunderbird heeft helaas geen directe integratie in VBA zoals Outlook.
      Er is wel een optie waarmee je de standaard email client kunt openen en daarin alvast het onderwerp plus de e-mail body kunt invoeren.
      De beperking bij deze methode is echter dat je geen bijlagen kunt meegeven of direct kunt verzenden.
      Sub SendEmailUsingDefaultClient()
      Dim EmailRecipient As String
      Dim EmailSubject As String
      Dim EmailBody As String
      Dim MailToLink As String

      EmailRecipient = "voorbeeld@email.com"
      EmailSubject = "Dit is een test onderwerp"
      EmailBody = "Dit is het bericht van de email."

      MailToLink = "mailto:" & EmailRecipient & "?subject=" & EmailSubject & "&body=" & EmailBody

      ' Open de standaard e-mailclient
      ThisWorkbook.FollowHyperlink MailToLink
      End Sub

  4. Dries

    Hoi Martinr,

    Ik probeerde bij mijn mail nog een handtekening toe te voegen met het volgende;
    Dim SigString As String
    Dim Signature As String

    SigString = Environ(“appdata”) & _
    “\Microsoft\Signatures\Handtekening (XXXXX@XXXX.nl).htm”

    If Dir(SigString) “” Then
    Signature = GetBoiler(SigString)
    Else
    Signature = “”
    End If

    En nadien de Getboiler function nog
    Function GetBoiler(ByVal sFile As String) As String
    Dim fso As Object
    Dim ts As Object
    Set fso = CreateObject(“Scripting.FileSystemObject”)
    Set ts = fso.GetFile(sFile).OpenAsTextStream(1, -2)
    GetBoiler = ts.readall
    ts.Close
    End Function

    Nu werkt alles prima maar krijg ik mijn handtekening steeds in tekst ipv hoe deze in de .htm file zit waar ik naar verwijs. Enig idee?

    Alvast bedankt.

  5. Boris

    Hele mooie macro! Werkt perfect, inmiddels uitgebreid met een persoonlijke aanhef. Tekst doe ik zelf in een cel met alt+enter zodat de macro klein blijft.

    De vraag van Dries heb ik ook, mijn eigen handtekening gebruiken met kleur en een logo. Krijg het ook niet voor elkaar…

    • MartinR

      Hoi Boris. Bedankt voor je compliment. Ik heb een deel toegevoegd aan het artikel waar jij denk ik naar op zoek bent. Mocht dit toch niet zo zijn. Laat het mij weten en dan kijk ik er naar!

  6. Boris

    Hoi Martin, dit doet precies wat ik bedoelde, geweldig!. Ik heb er htmlBody van gemaakt om het plaatje te zien. Nadeel is nu dat de vbNewLine geen witregels meer oplevert. Ook met vbCrLf krijg ik het niet voor elkaar. Nog goeie tips voor dat probleem?

  7. Nico Vriend

    Hallo,

    Heb de eerste macro gerpobeerd. Als ik die run dan opent hij een outlookmail en dan moet ik een account kiezen waarmee ik de mail wil versturen.
    Hoe kan ik er voor zorgen dat hij meteen het outlook email account gebruikt welk ik wil dat hij gebruikt?
    + als ik de mail verstuur naar 2 adressen, 1 outlook en 1 gmail dan komt hij in gmail aan met de afzender welk ik wil maar in Outlook is hij afkomstig van ‘systeembeheerder’, hoe kan dat en belangrijker, hoe op te lossen?

    Bij voorbaat dank + groet

    • MartinR

      Hoi Nico Probeer eens ‘.SendUsingAccount’ toe te voegen binnen je ‘With’.
      Dit doe je als volgt.

      With OutMail
      .SendUsingAccount = OutApp.Session.Accounts.Item("Voorbeeld@hotmail.com")
      .SentOnBehalfOfName = ThisWorkbook.Sheets("Blad1").Range("C1")
      .To = ThisWorkbook.Sheets("Blad1").Range("C2")
      .CC = ThisWorkbook.Sheets("Blad1").Range("C3")
      .Subject = ThisWorkbook.Sheets("Blad1").Range("C4")
      .Body = ThisWorkbook.Sheets("Blad1").Range("C5")
      .Display
      End With

  8. RobV

    Wie kan me helpen, ik ben heel erg ver gekomen met dit topic en ook vanuit een andere site heb ik deze 2 VBA’s kunnen combineren en gaat op zich goed alleen loop ik tegen 1 probleem aan. In cel J:J komt doormiddel van een formule een waarde uit van hoelang het project nog duurt dit veranderd iedere dag omdat deze steeds korter op de deadline komt. Nu wil ik dat hij me automatisch een mail stuurt als er nog 14 dagen over zijn. Dit lukt als ik hier gewoon zelf 14 invul maar niet als er een formule instaat. Wie kan mij helpen dat hij op basis van de formule dan toch automatisch herkent dat het 14 dagen termijn is bereikt?

    Onderstaand de VBA code die ik gebruik.

    Dim xRg As Range
    ‘Update by Extendoffice 20220729
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim xBoolean As Boolean
    Dim xItsRG As Range
    Dim xDDs As Range
    Dim xDs As Range
    On Error Resume Next
    xBoolean = False
    Set xRg = Range(“J:J”)
    Set xItsRG = Intersect(Target, xRg)
    Set xDDs = Intersect(Target.DirectDependents, xRg)
    Set xDs = Intersect(Target.Dependents, xRg)
    If Not (xItsRG Is Nothing) Then
    xBoolean = True
    ElseIf Not (xDDs Is Nothing) Then
    xBoolean = True
    ElseIf Not (xDs Is Nothing) Then
    xBoolean = True
    End If

    If Not xBoolean Then Exit Sub
    If Target.Cells.Count > 1 Then Exit Sub
    ‘Set xRg = Intersect(Range(“J:J”), Target)
    ‘If xRg Is Nothing Then Exit Sub
    If IsNumeric(Target.Value) And Target.Value = 14 Then
    Call Mail_small_Text_Outlook
    End If
    Dim WorkRng As Range
    Dim Rng As Range
    Dim xOffsetColumn As Integer
    Set WorkRng = Intersect(Application.ActiveSheet.Range(“C:C”), Target)
    xOffsetColumn = 4
    If Not WorkRng Is Nothing Then
    Application.EnableEvents = False
    For Each Rng In WorkRng
    If Not VBA.IsEmpty(Rng.Value) Then
    Rng.Offset(0, xOffsetColumn).Value = Now
    Rng.Offset(0, xOffsetColumn).NumberFormat = “dd-mm-yyyy”
    Else
    Rng.Offset(0, xOffsetColumn).ClearContents
    End If
    Next
    Application.EnableEvents = True
    End If
    End Sub
    Sub Mail_small_Text_Outlook()
    Dim xOutApp As Object
    Dim xOutMail As Object
    Dim xMailBody As String
    Set xOutApp = CreateObject(“Outlook.Application”)
    Set xOutMail = xOutApp.CreateItem(0)
    xMailBody = “Hi there” & vbNewLine & vbNewLine & _
    “This is line 1” & vbNewLine & _
    “This is line 2”
    On Error Resume Next
    With xOutMail
    .SentOnBehalfOfName = ThisWorkbook.Sheets(“Blad2”).Range(“B1”)
    .To = ThisWorkbook.Sheets(“Blad2”).Range(“B2”)
    .CC = ThisWorkbook.Sheets(“Blad2”).Range(“B3”)
    .Subject = ThisWorkbook.Sheets(“Blad2”).Range(“B4”)
    .Body = ThisWorkbook.Sheets(“Blad2”).Range(“B5”) & vbNewLine & vbNewLine & ThisWorkbook.Sheets(“Blad2”).Range(“B6”)
    .Send
    End With
    On Error GoTo 0
    Set xOutMail = Nothing
    Set xOutApp = Nothing
    End Sub

  9. lin

    Goedemiddag

    hoe kan ik in de macro aangeven dat de mail via een bepaald mailaccount moet worden verzonden, er staan meerdere accounts in mijn outlook en hij kiest nu steeds de verkeerde… overigens niet degene die in outlook als “standaard” wordt ingesteld

  10. Rene

    Beste,

    ik wil van een bepaald gebied een PDF maken en dit PDF mailen.
    Allerlei voorbeelden gezien, doch kom er niet uit.
    Ik wil niet de sheet naam gebruiken maar een eigen naam die automatisch is gegenereerd en staat in een cel.
    Deze cel heb ik een naam gegeven: Formuliernaam.
    Wat ik ook probeer aan te passen, ik kom er niet uit.
    Heeft er iemand een oplossing hiervoor?

    Sub pdf_verzenden_outlook_Test_mailen_afdrukgebied()
    MyFormuliernaam = Range(“Formuliernaam”)
    MyAfdrukgebied = Range(“Afdrukgebied”) ‘=(range(“B2:G99”)

    Range(“B2:G99”).ExportAsFixedFormat 0, Environ(“TEMP”) & “\” & Range(“Formuliernaam”) & “.pdf”

    With CreateObject(“Outlook.Application”).CreateItem(0)
    .To = “”testmailadres@gmail.com”
    .Subject = “Dit is het onderwerp”
    .Body = “Bij deze het bestand”
    .Attachments.Add Environ(“TEMP”) & “\” & Range(“Formuliernaam”) & “.pdf”
    .Send
    End With

    Range(“B2:G99”).PrintOut ‘of Range(“Formuliernaam”)
    End Sub

  11. Rene

    Ik wil aan de pdf een eigen naam geven.
    Die staat in een bepaalde regel, die ik “Formuliernaam” heb gegeven.

    als ik “ActiveSheet.Name” gebruik, dan krijg ik de naam van de sheet, maar ik wil dus een eigen naam eraan geven.

    Het lukt me dus niet om mijn eigen naam aan het pdf te geven.

    • MartinR

      Hoi Rene,

      De onderstaande 2 regel dien je aan te passen in je code.

      MyFormuliernaam = Range(“Formuliernaam”).Text

      Range(“B2:G99”).ExportAsFixedFormat 0, Environ(“TEMP”) & “\” & MyFormuliernaam & “.pdf”

      Zo moet het lukkken denk ik.

      Je had bij het toewijzen van de inhoud van de cel genaamd ‘Formuliernaam’ geen eigenschap van deze range meegegeven. Door er de ’text’ eigenschap aan mee te geven plaats je de inhoud van de cel in de variabele genaamd ‘MyFormuliernaam’. Bij de parameters voor de ‘ExportAsFixedFormat’ gebruik je vervolgens weer dezelfde variabele en dan zal de export wel worden aangemaakt met de bestandsnaam die jij in de cel genaamd ‘Formuliernaam’ hebt meegegeven.

  12. Rene

    Goede morgen Martin,

    onderstaande zou moeten werken met jouw voorgestelde aanpassingen, doch krijg telkens foutmelding:
    “Ongeldige procedure-aanroep of ongeldig argument”
    Doe ik nog steeds iets fout?

    Sub pdf_verzenden_outlook_Test_mailen_afdrukgebied()
    MyFormuliernaam = Range(“Formuliernaam”).Text

    MyAfdrukgebied = Range(“Afdrukgebied”) ‘=(range(“B2:G99”)

    Range(“B2:G99”).ExportAsFixedFormat 0, Environ(“TEMP”) & “\” & MyFormuliernaam & “.pdf”
    ‘ MyAfdrukgebied.ExportAsFixedFormat 0, Environ(“TEMP”) & “\” & MyFormuliernaam.Text & “.pdf”

    With CreateObject(“Outlook.Application”).CreateItem(0)
    .To = “test@gmail.com”
    .Subject = “Dit is het onderwerp”
    .Body = “Bij deze het bestand”
    ‘ .Attachments.Add Environ(“TEMP”) & “\” & Range(“Formuliernaam”) & “.pdf”
    .Attachments.Add Environ(“TEMP”) & “\” & MyFormuliernaam & “.pdf”

    ‘.Send
    .Display
    End With

    Range(“B2:G99”).PrintOut
    End Sub

    • MartinR

      Hoi Rene,

      Ik heb de code die onjuist was verwijderd. Dit werkt:

      Sub pdf_verzenden_outlook_Test_mailen_afdrukgebied()
      MyFormuliernaam = Range(“Formuliernaam”).Text
      Range(“B2:G99”).ExportAsFixedFormat 0, Environ(“TEMP”) & “\” & MyFormuliernaam & “.pdf”

      With CreateObject(“Outlook.Application”).CreateItem(0)
      .To = “test@gmail.com”
      .Subject = “Dit is het onderwerp”
      .Body = “Bij deze het bestand”
      .Attachments.Add Environ(“TEMP”) & “\” & MyFormuliernaam & “.pdf”
      .Display
      End With

      Range(“B2:G99”).PrintOut
      End Sub

  13. Sven

    Hey Martin,

    Als ik het bestand waar ik in aan het werken ben wil toevoegen als bijlage dan krijg ik een foutmelding wanneer de macro laat lopen.
    Nu vroeg ik mij is er manier waarop ik een kopie kan versturen van het werkblad waar ik in aan het werken ben

    • MartinR

      Hoi Sven,

      Dat kan zeker. Je kunt het bestand opslaan, een kopie maken en de kopie toevoegen aan de mail.
      Na het versturen kun je dan de kopie weer verwijderen.

      Alternatief is een nieuw workbook aanmaken met ‘workbooks.add’. Dan kopieer je daar de inhoud van je werkblad heen. Je slaat het nieuwe workbook op en sluit af. Daarna voeg je die toe aan de mail.

      Groetjes Martin

  14. Wim Taillieu

    Dag Martin

    Topartikel! Echter het laatste deeltje om een handtekening toe te voegen lukt mij nog niet. Bestaat er een mogelijkheid het bestandje eens doorgemaild te krijgen zodat ik de codes eens kan bestuderen en proberen vervolgens toe te passen in mijn document. Alvast hartelijk dank!

  15. Zeger

    Hallo,

    Ik heb nog behoefte aan een variant op de bijlage van de E-mail. Alles werkt verder perfect, maar in de betreffende map staan meer bestanden waarvan ik er een aantal aan de mail wil toevoegen. Dit gaat ook goed, zolang ik maar de exacte naam van de betreffende bestanden gebruik. Nu is het zo dat die naam van een betreffend bestand, in dit geval altijd een PDF, altijd een datum in de naam heeft. Bijvoorbeeld: “Overzicht 21-11-2024.pdf”. Dit is een overzicht dat uit een ander programma wordt gegenereerd. Wanneer alles op dezelfde dag wordt gegenereerd dan gaat het goed, want ik laat zoeken naar een bestand met een bepaalde naam en de datum van vandaag. Maar soms zit er meer tijd tussen en dan kan ik niet verwijzen naar een bestand met een willekeurige datum. Ik zou graag zien dat er niet verwezen wordt naar een exacte naam van het betreffende bestand, maar dat er gezocht kan worden naar een pdf in die betreffende map waarvan de naam begint met “Overzicht”. Is dit ook mogelijk?

    • MartinR

      Hoi Zeger,

      Dit is zeker mogelijk. Hiervoor kun je een dir functie gebruiken inclusief wildcard. In jouw geval is dat dus bestand = Dir(folder & “\Overzicht *.pdf”) Indien het meerdere bestanden zijn dan dien je dit in een loop te plaatsen. In het arikel Bestand en folder acties uitvoeren met een macro staat beschreven hoe je dit kunt doen. Laat maar weten indien je met de hulp van dit artikel er nog steeds niet uit komt.

      Mvg,

      Martin

  16. Zeger

    Hoi Martin,

    Helaas werkt dit bij niet. Het is altijd maar één bestand die met die naam begint. Ik heb nu dit staan
    .Attachments.Add ThisWorkbook.Path & “\Overzicht *.pdf”

    • MartinR

      Hoi Zeger,

      Met de Dir functie haal je alleen een bestandsnaam op. Indien je hem toe wilt voegen als attachment dien je weer de folder ervoor te plaatsen.

      Dit zou wel moeten werken:
      .Attachments.Add ThisWorkbook.Path & “\” & Dir(ThisWorkbook.Path & “\Overzicht *.pdf”)

      mvg,

      Martin

Geef een reactie

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