我有这个小功能,通过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
因此,也许你可以帮我解决这个例子,以便看到我的这个实际案例。
答案 0 :(得分:9)
这是早期约束:
Dim olApp As Outlook.Application
Set olApp = New Outlook.Application
这是后期绑定:
Dim olApp As Object
Set olApp = CreateObject("Outlook.Application")
后期绑定不需要引用 Outlook Library 16.0 ,而早期绑定则需要。但是,请注意,后期绑定有点慢,您将无法获得该对象的智能感知。
答案 1 :(得分:4)
正如Callum所指出的,后期绑定涉及将应用程序引用更改为对象而不是设置对库的引用。
如果没有引用,Excel在运行时之前对Outlook一无所知。这也意味着不仅intellisense不起作用,Outlook中值的常量名称也不会起作用。
e.g。在Outlooks立即窗口中,如果您键入Application.CreateItem(
,您将会弹出一大堆项目类型以供选择。例如olContactItem
。
Excel并不知道olContactItem
的含义 - 它是一个Outlook常量,只有Outlook或引用Outlook的应用程序才能理解。
在Outlook即时窗口中键入?olContactItem
,它将返回2
。这是您需要使用的数字而不是常量名称。
所以你的代码从中改变了
Application.CreateItem(olContactItem)
至olApp.CreateItem(2)
您需要在整个代码中执行此操作。
答案 2 :(得分:0)
在那种情况下,我通常在这样的模块中全局定义常量,这样就可以保留变量的描述性值。
公共常量olFormatHTML = 2