I have a function that creates an email via VBA.
I made this through Excel 2016. When some of my colleagues try to use it there an error of missing references (Outlook Library 16.0).
I looked in the internet for solutions and found the best is Late Binding. I have read about it but I don't understand how to make it work in the following example code.
Sub EscalateCase(what_address As String, subject_line As String, email_body As String)
Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")
Dim olMail As Outlook.MailItem
Set olMail = olApp.CreateItem(olMailItem)
olMail.To = what_address
olMail.Subject = subject_line
olMail.BodyFormat = olFormatHTML
olMail.HTMLBody = email_body
olMail.Send
End Sub
This is early binding:
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application
And this is late binding:
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
Late binding does not require a reference to Outlook Library 16.0 whereas early binding does. However, note that late binding is a bit slower and you won't get intellisense for that object.
As Callum pointed out, late binding involves changing your application reference to an object and not setting a reference to the library.
Without a reference Excel doesn't know anything about Outlook until runtime. This also means that not only will intellisense not work, the constant names for values in Outlook won't work either.
e.g. In Outlooks Immediate window if you type Application.CreateItem(
you'll get a whole load of item types pop up to choose from. olContactItem
for instance.
Excel hasn't a clue what olContactItem
means - it's an Outlook constant that only Outlook or an application with a reference to Outlook understands.
In Outlooks immediate window type ?olContactItem
and it will return 2
. That's the number you need to use instead of the constant name.
So your code changes fromApplication.CreateItem(olContactItem)
to olApp.CreateItem(2)
You need to do this throughout your code.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With