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

我有这个小function,实现了通过VBA创build电子邮件,
它从另一个与Excel文件一起工作的函数获取数据。

我遇到的问题是,我通过Excel 2016做了所有这一切,当我的一些同事尝试使用它时,出现缺less引用的错误(Outlook Library 16.0)。

所以我查了一下互联网的解决scheme,我发现的很多,但是最好是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 

因此,也许你可以用这个例子来帮助我,看看这个我的实际案例。

这是早期绑定:

 Dim olApp As Outlook.Application Set olApp = New Outlook.Application 

这是迟到的约束:

 Dim olApp As Object Set olApp = CreateObject("Outlook.Application") 

后期绑定不需要引用Outlook库16.0,而早期绑定。 但是,请注意,后期绑定有点慢,你不会得到该对象的智能感知。

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

没有引用Excel直到运行时才知道有关Outlook的任何信息。 这也意味着,不仅intellisense不工作,在Outlook中的常量名称也不会工作。

例如,如果您键入Application.CreateItem(则在“Outlook立即”窗口中Application.CreateItem(您将获得popup一个项目types的完整负载,例如olContactItem

Excel并不知道olContactItem是什么意思 – 这是一个Outlook常量,只有Outlook或具有Outlook引用的应用程序才能理解。

?olContactItem立即窗口types?olContactItem ,它将返回2 。 这是你需要使用的数字,而不是常数名称。

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

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