Excel VBA – e-mail opstellen

excel_vba_e-mail_opstellenIn dit artikel worden twee methoden met elkaar vergeleken voor het versturen van een e-mail vanuit Excel via het Outlook-object.

In methode A wordt er gebruik gemaakt van een vroege binding en in methode B van een late binding.

Het voornaamste verschil zit in de declaratie en initialisatie van de Outlook objecten.

Methode A Methode B
Vroege binding Late binding
Dim objOutlook As Outlook.Application Dim objOutlook as Object
Dim objMail As Outlook.MailItem Dim objMail As Object
Set objOutlook = New Outlook.Application Set objOutlook = CreateObject(“Outlook.Application”)
Set objMail = objOutlook.CreateItem(olMailItem) Set objMail = objOutlook.CreateItem(0)

Het binden (koppelen) beoogt het binden van de ene applicatie met de andere applicatie. In dit geval dus Excel met Outlook.

excel_vba_e-mail_intellisenseexcel_vba_ontbrekende_verwijzingIn methode A wordt de koppeling in design time gemaakt. Dit heeft als voordeel dat je de IntelliSense (zie linker afbeelding) kan gebruiken voor het selecteren van eigenschappen c.q. methoden en dat fouten gelijk worden opgemerkt. Een nadeel van deze methode is dat er eenmalig handmatig een verwijzing moet worden gemaakt naar het Outlook-object. Zo is het oefenbestand gemaakt in Excel 2016 met een verwijzing naar ‘Microsoft Outlook 16 Object Library’.

Wanneer deze methode bij een oudere versie van Excel wordt uitgevoerd, zal deze een fout opleveren (zie rechter afbeelding).

In methode B wordt de koppeling @ runtime tot stand gebracht. Deze methode kan langer duren. Gezien Outlook als (generiek) object wordt gedeclareerd kan de IntelliSense niet gebruikt worden en zullen fouten niet specifiek worden aangegeven. Het grote voordeel is wel dat er geen aparte verwijzing gemaakt hoeft te worden zoals bij methode A. Hierdoor kan deze methode ten alle tijden versie-onafhankelijk worden gebruikt.

'-----------------------------------------------------------------------------------------------------------------------
' Auteur        : pascalterheege.nl
' Datum         : 22-2-2016
' Object        : modOutlook
' Doel          : twee verschillende methoden voor het aanroepen van een andere Office applicatie
' Bron          : https://support.microsoft.com/nl-nl/kb/245115
'                 http://nieuwsbrief.helpmij.nl/artikel.php?id=2539
'-----------------------------------------------------------------------------------------------------------------------

Option Explicit

'-----------------------------------------------------------------------------------------------------------------------
' Datum         : 22-2-2016
' Type          : Subroutine
' Verwijzing    : Microsoft Outlook X Object Library
' Opmerking     : vroege binding
'-----------------------------------------------------------------------------------------------------------------------
Sub methodeA()

    Dim objOutlook As Outlook.Application
    Dim objMail As Outlook.MailItem
    
    Dim strAan As String
    Dim strCC As String
    Dim strOnderwerp As String
    Dim strBericht As String

    Set objOutlook = New Outlook.Application
    Set objMail = objOutlook.CreateItem(olMailItem)
    
    strAan = [B1]
    strCC = [B2]
    strOnderwerp = [B3]
    strBericht = [B4]
    
    With objMail
        .To = strAan
        .CC = strCC
        .Subject = strOnderwerp
        .Body = strBericht
        .Display
    End With

    Set objMail = Nothing
    Set objOutlook = Nothing


End Sub
'-----------------------------------------------------------------------------------------------------------------------
' Datum         : 22-2-2016
' Type          : Subroutine
' Opmerking     : late binding
'-----------------------------------------------------------------------------------------------------------------------
Sub methodeB()

    Dim objOutlook As Object
    Dim objMail As Object
    
    Dim strAan As String
    Dim strCC As String
    Dim strOnderwerp As String
    Dim strBericht As String

    Set objOutlook = CreateObject("Outlook.Application")
    Set objMail = objOutlook.CreateItem(0)

    strAan = [B1]
    strCC = [B2]
    strOnderwerp = [B3]
    strBericht = [B4]
    
    With objMail
        .To = strAan
        .CC = strCC
        .Subject = strOnderwerp
        .Body = strBericht
        .Display
    End With

    Set objMail = Nothing
    Set objOutlook = Nothing

End Sub

Download hier het oefenbestand.