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

4

我有一个通过VBA创建电子邮件的函数。

我是通过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

7
Dim olApp As Outlook.Application更改为Dim olApp As Object - CallumDA
https://support.microsoft.com/en-us/help/245115/using-early-binding-and-late-binding-in-automation - David Zemens
3个回答

14

这是早期绑定:

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

这就是晚期绑定:

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

晚期绑定不需要引用Outlook库16.0,而早期绑定需要。但是,请注意,晚期绑定稍微慢一些,并且您无法获得该对象的智能感知。


6
正如Callum所指出的,后期绑定涉及更改应用程序对对象的引用而不是设置对库的引用。
没有引用,Excel在运行时不知道任何关于Outlook的信息。这也意味着,智能感知将不起作用,Outlook中的常量名称也将无法使用。
例如,在Outlook的立即窗口中键入Application.CreateItem(,您将看到一堆项目类型供选择。例如,olContactItem。
Excel不知道olContactItem是什么意思-它是一个只有Outlook或具有对Outlook引用的应用程序才能理解的Outlook常量。
在Outlook的立即窗口中键入?olContactItem,它将返回2。这是您需要使用而不是常量名称的数字。
因此,您的代码从
Application.CreateItem(olContactItem)更改为olApp.CreateItem(2) 您需要在整个代码中执行此操作。

1
在这种情况下,我通常会在模块中全局定义常量,像这样,这样您就可以保留变量的描述值。
公共常量 olFormatHTML = 2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接