如何在VBA中进行后期绑定?

Fra*_*ica 3 excel outlook vba late-binding excel-vba

我有这个小功能,可以通过VBA实现电子邮件的创建,
它从另一个与Excel文件一起工作的函数中获取数据.

我遇到的问题是我通过Excel 2016完成了这一切,当我的一些同事试图使用它时,错误的引用(Outlook Library 16.0).

所以我查看了互联网解决方案,我找到的解决方案很多,但更好的是Late Binding.我已经阅读了所有相关内容,但我似乎并不真正了解正在发生的事情以及如何使其在以下代码中运行.

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
Run Code Online (Sandbox Code Playgroud)

因此,也许你可以帮我解决这个例子,以便看到我的这个实际案例.

Cal*_*mDA 10

这是早期绑定:

Dim olApp As Outlook.Application
Set olApp = New Outlook.Application
Run Code Online (Sandbox Code Playgroud)

这是后期绑定:

Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
Run Code Online (Sandbox Code Playgroud)

后期绑定不需要引用Outlook Library 16.0,而早期绑定也需要.但是,请注意,后期绑定有点慢,您将无法获得该对象的智能感知.


Dar*_*ook 5

正如Callum所指出的,后期绑定涉及将应用程序引用更改为对象而不是设置对库的引用.

没有引用,Excel直到运行时才知道有关Outlook的任何信息.这也意味着不仅智能感知不起作用,Outlook中值的常量名称也不起作用.

例如,在Outlooks立即窗口中,如果键入,Application.CreateItem(您将弹出可供选择的整个项目类型. olContactItem例如.

Excel没有任何olContactItem意义 - 这是一个Outlook常量,只有Outlook或引用Outlook的应用程序才能理解.

在Outlooks立即窗口类型?olContactItem,它将返回2.这是您需要使用的数字而不是常量名称.

所以你的代码从
Application.CreateItem(olContactItem)变为olApp.CreateItem(2)

您需要在整个代码中执行此操作.