Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在VBA中进行后期绑定?_Vba_Excel_Outlook_Late Binding - Fatal编程技术网

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

如何在VBA中进行后期绑定?,vba,excel,outlook,late-binding,Vba,Excel,Outlook,Late Binding,我有一个通过VBA创建电子邮件的小功能, 它从另一个与Excel文件一起工作的函数获取数据 我的问题是,我通过Excel 2016完成了所有这些,当我的一些同事尝试使用它时,出现了缺少引用的错误(Outlook Library 16.0) 因此,我查看了互联网解决方案,发现的解决方案很多,但最好是后期绑定。我已经阅读了所有关于它的内容,但我似乎并不真正理解下面的代码中发生了什么以及如何使它工作 Sub EscalateCase(what_address As String, subject_li

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

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

因此,我查看了互联网解决方案,发现的解决方案很多,但最好是后期绑定。我已经阅读了所有关于它的内容,但我似乎并不真正理解下面的代码中发生了什么以及如何使它工作

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 Library 16.0,而早期绑定则需要引用。但是,请注意,后期绑定稍微慢一点,您将无法获得该对象的intellisense

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

如果没有引用,Excel在运行时之前对Outlook一无所知。这也意味着不仅intellisense不起作用,Outlook中值的常量名称也不起作用

e、 g.在Outlooks即时窗口中,如果您键入
Application.CreateItem(
),您将弹出一大堆项目类型供选择。例如,
olContactItem

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

在Outlooks即时窗口中,键入
?olContactItem
,它将返回
2
。这是您需要使用的数字,而不是常量名称

因此,您的代码将从
Application.CreateItem(olContactItem)
to
olApp.CreateItem(2)


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

在这种情况下,我通常在这样的模块中全局定义常量,这样您就保留了变量的描述性值


Public Const olFormatHTML=2

作为Outlook的Dim olApp。应用程序
更改为
作为对象的Dim olApp