从 Access 中打开 Outlook 的后期绑定

Posted

技术标签:

【中文标题】从 Access 中打开 Outlook 的后期绑定【英文标题】:Late Binding to Open Outlook from Access 【发布时间】:2013-10-04 15:06:50 【问题描述】:

当总机加载时,我正在尝试从 Access VBA 打开 Outlook 应用程序。我打开了任务管理器,我可以看到一个 Outlook 实例出现大约 5 秒钟然后关闭,但我无法打开资源管理器窗口。我一直在尝试拼凑来自VBA: Determining whether an existing Outlook instance is open 和其他来源的代码,但它只是不起作用。有什么想法吗?

而且我想坚持使用后期绑定,这样我就不必担心如果有人用 XP 打开对象库。

Function OpenEmail()

Dim olApp As Object ' Outlook.Application
Dim olFolderInbox As Object
Dim objExplorer As Object

On Error Resume Next

Set olApp = GetObject(, "Outlook.Application")

If olApp Is Nothing Then
    MsgBox "Outlook is not Open"
    Set olApp = CreateObject("Outlook.Application")
End If

Set objExplorer = CreateObject("Outlook.MAPIFolder")
Set objExplorer = olApp.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox)

objExplorer.Activate

'Set olApp = Nothing

End Function

【问题讨论】:

【参考方案1】:

Outlook 是唯一一个GetObjectCreateObject 执行相同操作的 MS Office 应用程序。与其他 MS Office 应用程序不同,CreateObject 不会创建多个 Outlook 实例。

olFolderInbox 也是一个前景常量。您必须在 ACCESS 中定义它。

试试这个

Const olFolderInbox As Long = 6

Sub Sample()
    Dim olApp As Object
    Dim objNS As Object
    Dim olFolder As Object

    Set olApp = CreateObject("Outlook.Application")
    Set objNS = olApp.GetNamespace("MAPI")
    Set olFolder = objNS.GetDefaultFolder(olFolderInbox)

    With olFolder
        '~~> Do what you want
    End With
End Sub

【讨论】:

在 With 中添加了 .Display。奇迹般有效。我真的很感激!

以上是关于从 Access 中打开 Outlook 的后期绑定的主要内容,如果未能解决你的问题,请参考以下文章

使用 Access VBA 从 Outlook 获取附件

从 MS Access 2016 VBA 启动 Outlook 2016 触发“另一个程序正在使用 Outlook”并死掉

MS Access / Outlook 2010 - 如何选择从哪个帐户发送电子邮件?

使用不同的 Outlook 电子邮件地址从 Access 发送电子邮件

通过 Outlook 向 Access 报告的特定页面发送电子邮件

outlook express到底是啥东西啊?百度百科里面的东西我看不懂。谁能用举例的方式解释一下,谢谢