Outlook Object Library Does Not Switch Between Versions 12 And 14

10,071

ForEachLoop,

It appears that your question has largely been answered. I will merely add a bit of information for clarity's sake, and to provide this question with an answer. A user on the Microsoft Forums, Ossiemac, noted that LateBinding was the way to go, as has been stated by Siddarth Rout. As implied by Siddarth, that means you do not have to worry about references.

Ossiemac provided some sample code for using the LateBinding in the sending of an email, which I have reformatted and placed here:

Private Sub btnLateBindMethod_Click()
    ' Variables used for LateBinding
    Dim objOutlook As Object    'Outlook.Application  
    Dim objEmail As Object      'Outlook.MailItem     
    Dim objNameSpace As Object  'Outlook.NameSpace    
    Const OutLookMailItem As Long = 0    'For Late Binding
    Const OutLookFolderInbox As Long = 6 'For Late Binding
    Const OutLookFormatHTML As Long = 2  'For Late Binding
    Dim strSubject As String
    Dim strAddress As String


On Error Resume Next
Set objOutlook = GetObject(, "Outlook.Application")
On Error GoTo 0     

    If objOutlook Is Nothing Then
        Set objOutlook = CreateObject("Outlook.Application")
        Set objNameSpace = objOutlook.GetNamespace("MAPI")
        objNameSpace.GetDefaultFolder(OutLookFolderInbox).Display
    End If

Set objEmail = objOutlook.CreateItem(OutLookMailItem)

strSubject = "Hello World"

    With objEmail

        '.To = strToAddress  'Commented to prevent accidental send

        .Subject = strSubject

        .BodyFormat = OutLookFormatHTML

        .Display

        'Full Name of window can change depending on Tools -> Options -> Mail Format
        'Changing this option for outgoing mail changes the window name.
        'However, AppActivate appears not to require entire name but needs up to end
        'of - Message which is included in heading following the Subject string
        'irrespective of the Mail Format option chosen.
        AppActivate (strSubject & " - Message")

    End With    
End Sub

Jimmy Pena has an article discussing the contrast of EarlyBinding and LateBinding -

~JOL

Share:
10,071
ForEachLoop
Author by

ForEachLoop

I'm a programmer, writer, and programmer-writer with the NASA Johnson Space Center in Houston. I write efficiency tools, focusing on Microsoft Office documents, most notably Word documents. I once wrote a product tracking application, in part making sure astronauts have clean underwear. Mundane perhaps, but the astronauts appreciate it. I have documented APIs for a long time, first at Microsoft, and then at NASA. In my so-called spare time I write about programming, APIs, and Microsoft Word automation. I've authored three books. I have a API documentation book coming out in spring of 2018 and before that was "The Secret Life of Word." Both from XML Press (xmlpress.net), available at Amazon.com and 10,000 other online bookstores. My first book as "Introduction to Microsoft Kokanee" (2002, Microsoft Press), about Microsft's speech recognition software.

Updated on June 08, 2022

Comments

  • ForEachLoop
    ForEachLoop almost 2 years

    I have a .dotm template file on a network share. There are macros with references to the Word, Office, and Outlook object libraries. We use two different platforms, Windows XP and Windows 7, along with Microsoft Office 2007 and Office 2010. When users open the template file the references for Word and Office adjust automatic and accordingly (that is, they’re set to Microsoft Word 12 Object Library or Microsoft Word 14 Object Library as needed), and the macros run without a problem.

    Microsoft Outlook Object Library switches properly from version 12 to 14. It does not switch properly from version 14 to 12. In that case, it gives the error that the libary is not found. Is this a bug? Is there a workaround? Something I’m overlooking?

  • ForEachLoop
    ForEachLoop over 11 years
    Thanks. I did end up using late binding. It's a great article! The solution's awkward since you lose a lot of the cool features of the editor. Also, if you use a compiler (such as Visual Studio) you can workaround this, for example, by having Word and Excel 2007 and 2010 loaded side by side and choose which version want to compile to. Unfortunately, two versions of Outlook can't be loaded side by side, so you're stuck with late binding anyhow.
  • Scott Conover
    Scott Conover over 11 years
    Fascinating! I am glad it functioned, and the concept of passing between different versions of word for compilation by using VS bears further exploration in the future... Thanks for the details on the implementation! ~JOL
  • Ben Strombeck
    Ben Strombeck about 8 years
    Thanks for this, this was very helpful. I had to Google for all of the constants I needed, as I'm dealing with calendar appointments instead of mail items, but this got me up and running again. I'm having to do this because of different versions of Outlook.