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.
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
Mooie oplossing, dank voor het delen.
Graag gedaan!
Super helder uitgelegd. Bedankt, hier kan ik wat mee!
Is het ook mogelijk om een mail te verzenden naar verschillende geadresseerden met elk een unieke bijlage?
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
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
Hoi Jan,
Is dit toevallig vanuit een werkomgeving? Het kan dan namelijk zijn dat deze functionaliteit geblokkeerd wordt door een security policy.
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?
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
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.
Hoi Dries,
Als je wilt, kun je jouw html file die je handtekening bevat eens sturen naar info@macroexcel.nl?
Dan zal ik voor je uitzoeken hoe je deze op een juiste manier bijvoegt i.p.v. enkel de tekst.
Hoi Martin,
Ik wil precies hetzelfde: een volledig opgemaakte mail met handtekening (bijvoorbeeld uit een word document halen oid.
Ben heel benieuwd naar je oplossing.
Bedankt
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…
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!
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?
Hoi Boris. Dit moet idd .HTMLbody zijn. Probeer voor een witregel eens “
” toe te voegen.
Mvg,
Martin
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
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
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
Hoi Rob,
Zou je de betreffende sheet kunnen mailen naar info@macroExcel.nl? Dan kan ik er even naar kijken.
Mvg,
Martin
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
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
Hoi Rene,
Kun je iets specifieker aangeven wat er niet lukt? Gaat het alleen fout bij het mailen? Lukt de PDF export wel?
Mvg,
Martin
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.
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.
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
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
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
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
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!
Hoi Wim,
Dat kan hoor. Je doelt dan op een handtekening inclusief afbeelding neem ik aan?
Mvg,
Martin
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?
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
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”
Sorry, dat moet natuurlijk zijn:
.Attachments.Add Dir(ThisWorkbook.Path & “\Overzicht *.pdf”)
Maar dat werkt helaas ook niet bij mij
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