VBA email sturen via Outlook (2026)
Met VBA kun je automatisch emails versturen via Outlook vanuit Excel. Dit is ideaal voor het verzenden van rapporten, facturen of geautomatiseerde berichten naar meerdere ontvangers. In deze handleiding leer je stap voor stap hoe je de Outlook Object Model gebruikt om emails te maken, bijlagen toe te voegen en CC/BCC in te stellen.
Laatst bijgewerkt: januari 2026
Wat is Outlook Automation in VBA?
Outlook Automation betekent dat je vanuit Excel VBA-code schrijft die Microsoft Outlook aanstuurt. Je gebruikt hiervoor de Outlook Object Model, een verzameling objecten en methoden waarmee je:
- Nieuwe emails aanmaakt
- Ontvangers instelt (To, CC, BCC)
- Onderwerp en berichttekst toevoegt
- Bijlagen bijvoegt
- Emails verstuurt of als concept opslaat
Basisstructuur:
Dim outlookApp As Object
Dim outlookMail As Object
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)
De CreateObject("Outlook.Application") maakt een verbinding met Outlook, en CreateItem(0) maakt een nieuw email-item aan (0 staat voor olMailItem).
VBA email sturen stap-voor-stap
Stap 1: Open de VBA Editor
- Windows: Druk op
Alt + F11in Excel - Mac: Ga naar Extra > Macro’s > Visual Basic Editor (let op: Outlook Automation werkt beperkt op Mac)
Als je nog nooit met VBA hebt gewerkt, bekijk dan eerst onze VBA voor beginners handleiding voor de basiskennis.
Stap 2: Voeg een nieuwe Module toe
- Klik in de VBA Editor op Invoegen > Module
- Er verschijnt een leeg codevenster
Stap 3: Schrijf de basis email code
Plak deze code in de module:
Sub VerstuurEmail()
Dim outlookApp As Object
Dim outlookMail As Object
' Maak verbinding met Outlook
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)
' Stel email eigenschappen in
With outlookMail
.To = "ontvanger@voorbeeld.nl"
.Subject = "Test email vanuit Excel"
.Body = "Beste ontvanger," & vbNewLine & vbNewLine & _
"Dit is een automatisch gegenereerde email vanuit Excel." & vbNewLine & vbNewLine & _
"Met vriendelijke groet"
.Display ' Toont de email (gebruik .Send om direct te versturen)
End With
' Ruim objecten op
Set outlookMail = Nothing
Set outlookApp = Nothing
End Sub
Stap 4: Voer de macro uit
- Windows: Druk op
F5of klik op de groene play-knop - Mac: Klik op Uitvoeren > Macro uitvoeren
De email verschijnt nu in Outlook. Vervang .Display door .Send om direct te versturen.
Outlook Object Model: belangrijke eigenschappen
| Eigenschap | Beschrijving | Voorbeeld |
|---|---|---|
.To |
Primaire ontvanger(s) | "jan@test.nl; piet@test.nl" |
.CC |
Carbon Copy ontvangers | "manager@bedrijf.nl" |
.BCC |
Blind Carbon Copy | "admin@bedrijf.nl" |
.Subject |
Onderwerpregel | "Maandrapport januari" |
.Body |
Platte tekst inhoud | "Beste lezer..." |
.HTMLBody |
HTML-opgemaakte inhoud | "<b>Vet</b> en <i>cursief</i>" |
.Attachments.Add |
Bijlage toevoegen | "C:\rapport.pdf" |
.Importance |
Prioriteit (0=laag, 1=normaal, 2=hoog) | 2 |
.Display |
Toon email in Outlook | – |
.Send |
Verstuur direct | – |
Bijlagen toevoegen aan je email
Het toevoegen van bijlagen is essentieel voor het versturen van rapporten of facturen:
Sub EmailMetBijlage()
Dim outlookApp As Object
Dim outlookMail As Object
Dim bijlagePad As String
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)
bijlagePad = "C:\Documenten\Rapport.xlsx"
With outlookMail
.To = "ontvanger@voorbeeld.nl"
.Subject = "Maandrapport met bijlage"
.Body = "Hierbij het gevraagde rapport als bijlage."
' Controleer of bestand bestaat voor toevoegen
If Dir(bijlagePad) <> "" Then
.Attachments.Add bijlagePad
Else
MsgBox "Bijlage niet gevonden: " & bijlagePad
Exit Sub
End If
.Display
End With
Set outlookMail = Nothing
Set outlookApp = Nothing
End Sub
Tip: Je kunt ook het actieve Excel-bestand als bijlage toevoegen met ThisWorkbook.FullName.
CC en BCC instellen
Voor het versturen naar meerdere ontvangers gebruik je CC (zichtbare kopie) en BCC (onzichtbare kopie):
Sub EmailMetCCenBCC()
Dim outlookApp As Object
Dim outlookMail As Object
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)
With outlookMail
.To = "hoofdontvanger@bedrijf.nl"
.CC = "collega1@bedrijf.nl; collega2@bedrijf.nl"
.BCC = "archief@bedrijf.nl"
.Subject = "Projectupdate Q1"
.Body = "Beste allen," & vbNewLine & vbNewLine & _
"Hierbij de projectupdate voor Q1."
.Display
End With
Set outlookMail = Nothing
Set outlookApp = Nothing
End Sub
Meerdere ontvangers scheid je met een puntkomma (;).
HTML-emails versturen
Voor opgemaakte emails gebruik je .HTMLBody in plaats van .Body:
Sub HTMLEmail()
Dim outlookApp As Object
Dim outlookMail As Object
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)
With outlookMail
.To = "ontvanger@voorbeeld.nl"
.Subject = "Opgemaakte email"
.HTMLBody = "<html><body>" & _
"<h2 style='color:navy;'>Maandrapport</h2>" & _
"<p>Beste lezer,</p>" & _
"<p>Hieronder de <b>belangrijkste cijfers</b>:</p>" & _
"<ul>" & _
"<li>Omzet: €50.000</li>" & _
"<li>Kosten: €35.000</li>" & _
"<li>Winst: €15.000</li>" & _
"</ul>" & _
"<p>Met vriendelijke groet</p>" & _
"</body></html>"
.Display
End With
Set outlookMail = Nothing
Set outlookApp = Nothing
End Sub
Emails versturen naar meerdere ontvangers vanuit Excel
Een praktisch voorbeeld: verstuur gepersonaliseerde emails naar een lijst ontvangers in Excel. Dit combineert perfect met VBA lussen voor het doorlopen van cellen:
Sub VerstuurBulkEmails()
Dim outlookApp As Object
Dim outlookMail As Object
Dim ws As Worksheet
Dim laatsteRij As Long
Dim i As Long
Dim emailAdres As String
Dim naam As String
Set ws = ThisWorkbook.Sheets("Ontvangers")
Set outlookApp = CreateObject("Outlook.Application")
' Vind laatste rij met data
laatsteRij = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
' Loop door alle ontvangers
For i = 2 To laatsteRij ' Start bij rij 2 (rij 1 = koptekst)
emailAdres = ws.Cells(i, 1).Value ' Kolom A = email
naam = ws.Cells(i, 2).Value ' Kolom B = naam
Set outlookMail = outlookApp.CreateItem(0)
With outlookMail
.To = emailAdres
.Subject = "Persoonlijk bericht voor " & naam
.Body = "Beste " & naam & "," & vbNewLine & vbNewLine & _
"Dit is een gepersonaliseerd bericht." & vbNewLine & vbNewLine & _
"Met vriendelijke groet"
.Send ' Direct versturen
End With
Set outlookMail = Nothing
Next i
Set outlookApp = Nothing
MsgBox "Alle emails zijn verstuurd!"
End Sub
Praktijkvoorbeeld: Automatisch rapport versturen
Dit complete voorbeeld slaat het huidige werkblad op als PDF en verstuurt deze als bijlage:
Sub VerstuurRapportAlsPDF()
Dim outlookApp As Object
Dim outlookMail As Object
Dim pdfPad As String
Dim bestandsNaam As String
' Stel PDF pad in
bestandsNaam = "Rapport_" & Format(Date, "yyyy-mm-dd") & ".pdf"
pdfPad = Environ("TEMP") & "\" & bestandsNaam
' Exporteer actieve sheet naar PDF
ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=pdfPad, _
Quality:=xlQualityStandard
' Maak en verstuur email
Set outlookApp = CreateObject("Outlook.Application")
Set outlookMail = outlookApp.CreateItem(0)
With outlookMail
.To = "manager@bedrijf.nl"
.CC = "team@bedrijf.nl"
.Subject = "Dagrapport " & Format(Date, "dd-mm-yyyy")
.Body = "Beste," & vbNewLine & vbNewLine & _
"Hierbij het dagrapport als PDF bijlage." & vbNewLine & vbNewLine & _
"Met vriendelijke groet"
.Attachments.Add pdfPad
.Display ' Of .Send voor direct versturen
End With
Set outlookMail = Nothing
Set outlookApp = Nothing
End Sub
Dit voorbeeld maakt gebruik van technieken uit onze VBA variabelen handleiding.
Veelgemaakte fouten
Fout 1: Outlook is niet geinstalleerd of gesloten
Probleem: De code geeft een foutmelding “ActiveX-component kan object niet maken” of runtime error 429.
Oplossing: Zorg dat Microsoft Outlook is geinstalleerd en minimaal een keer handmatig is gestart. Outlook hoeft niet open te staan, maar moet wel geconfigureerd zijn met een email-account.
Fout 2: Beveiligingswaarschuwing blokkeert verzending
Probleem: Outlook toont een beveiligingsmelding “Een programma probeert email te versturen namens u” en de code stopt.
Oplossing: Dit is een beveiligingsmaatregel van Outlook. Opties:
– Klik handmatig op “Toestaan” bij elke email
– Gebruik .Display in plaats van .Send en verstuur handmatig
– Overweeg een digitale handtekening voor vertrouwde macro’s
Fout 3: Bijlage wordt niet gevonden
Probleem: Runtime error 3004 of melding dat het bestand niet bestaat.
Oplossing: Controleer altijd of het bestand bestaat voordat je het toevoegt:
If Dir(bijlagePad) <> "" Then
.Attachments.Add bijlagePad
Else
MsgBox "Bestand niet gevonden!"
End If
Gebruik absolute paden (volledig pad) in plaats van relatieve paden.
Fout 4: Late Binding vs Early Binding verwarring
Probleem: Code werkt niet of geeft type-fouten na het toevoegen van Outlook Reference.
Oplossing: Deze handleiding gebruikt Late Binding (CreateObject). Bij Early Binding voeg je via Extra > Verwijzingen de “Microsoft Outlook Object Library” toe en declareer je:
Dim outlookApp As Outlook.Application
Late Binding werkt op alle systemen, Early Binding is sneller maar vereist de library.
Fout 5: Ontvangersveld verkeerd opgemaakt
Probleem: Email wordt niet verstuurd of komt bij verkeerde ontvanger.
Oplossing: Meerdere ontvangers scheid je met puntkomma (;), niet met komma. Controleer op extra spaties:
.To = Trim(emailAdres) ' Verwijder voorloop- en naspaties
Bekijk ook onze pagina over VBA foutafhandeling voor meer tips over het opvangen van fouten.
FAQ
Hoe verstuur ik een email zonder dat Outlook opent?
Gebruik .Send in plaats van .Display. Let op: Outlook kan een beveiligingswaarschuwing tonen die je handmatig moet bevestigen.
Kan ik emails versturen zonder Microsoft Outlook?
Nee, de Outlook Object Model vereist dat Outlook is geinstalleerd. Alternatieven zijn CDO (Collaboration Data Objects) of externe SMTP-libraries, maar deze zijn complexer in te stellen.
Hoe voeg ik een Excel-tabel toe als afbeelding in de email?
Kopieer het bereik naar het klembord en plak het in de HTMLBody:
Range("A1:D10").CopyPicture Appearance:=xlScreen, Format:=xlPicture
Dit vereist aanvullende code voor het opslaan als afbeelding.
Werkt VBA Outlook Automation op Mac?
Beperkt. De volledige Outlook Object Model is alleen beschikbaar op Windows. Op Mac kun je AppleScript gebruiken of de Mac-specifieke Outlook-methodes, maar de functionaliteit is beperkter.
Hoe stel ik een leesbevestiging in?
Voeg deze regel toe aan je With-blok:
.ReadReceiptRequested = True
Kan ik emails inplannen voor later versturen?
Ja, gebruik de .DeferredDeliveryTime eigenschap:
.DeferredDeliveryTime = DateAdd("h", 2, Now) ' Verstuur over 2 uur
Hoe verstuur ik een email met hoge prioriteit?
Stel de .Importance eigenschap in:
.Importance = 2 ' 0=laag, 1=normaal, 2=hoog
Kan ik de email opslaan als concept in plaats van versturen?
Ja, gebruik .Save in plaats van .Send of .Display:
.Save ' Slaat op in de map Concepten
Gerelateerde artikelen
- VBA voor beginners in Excel – Eerste stappen met macro’s schrijven
- Macro opnemen in Excel – Automatiseren zonder VBA-kennis
- VBA MsgBox en InputBox – Dialoogvensters in je code
- VBA lussen in Excel – Herhalende taken automatiseren
- VBA variabelen in Excel – Data opslaan in je code
- VBA foutafhandeling – Fouten opvangen met On Error
Hulp nodig bij Excel?
Kom je er niet uit met VBA email automatisering of andere Excel-vraagstukken? Ik help je graag verder.
Neem contact op:
– WhatsApp: Stuur een bericht
– E-mail: w.bouwmeester@bouwmeesterconsultancy.nl
– Telefoon: +31 6 28963636
Of bekijk mijn Excel hulp diensten voor professionele ondersteuning.





