访问宏以从MS Outlook中读取电子邮件

时间:2013-01-28 19:17:05

标签: ms-access outlook access-vba instance

我在Access中有一个连接到正在运行的MS Outlook实例的宏。

宏一直在工作,直到上周我开始收到错误:每当我运行宏时, Activex组件都无法创建对象

这是代码的一部分,它目前在哪里失败:

Function GatherDailyStats()
Dim oOlAp As Object, oOlns As Object, oOlInb As Object
Dim oOlItm As Object
'Dim FileName As
Dim i, j As Integer
Dim strDir1 As String
Dim strDir2 As String
'~~> Get Outlook instance
Set oOlAp = GetObject(, "Outlook.Application") '--**THIS IS WHERE IT FAILS**
Set oOlns = oOlAp.GetNamespace("MAPI")
Set oOlInb = oOlns.GetDefaultFolder(olFolderInbox).Folders.Item("Daily Stats")

'~~> Check if there are any actual unread emails
If oOlInb.Items.Restrict("[UnRead] = True").Count = 0 Then
    MsgBox "NO Unread Email In Daily Stats folder"
    Exit Function
End If

自从我创建并彻底测试后,代码中没有任何变化。


更新:我刚刚在另一台计算机上测试了相同的应用程序,它在那里工作得很好。

3 个答案:

答案 0 :(得分:1)

Here is a KB article about the ROT and how Office applications by design don't register until their start up sequence has finished.你可能会看到一个始终存在的问题,但由于某种原因从未遇到过它。

this discussion解除,您可能需要尝试添加回退以确保应用程序正在运行:

    On Error Resume Next
    Set objOutlook = GetObject(, "Outlook.Application")
    If Err.Number = 429 Then
        Set objOutlook = CreateObject("Outlook.Application") 
    End If

从同一个讨论中,重要的是要注意Outlook 2010在管理员模式下未启动时在ROT中注册时显然存在某种问题。

有人发布的

Apparently there is a work around包括:

  

...如果为Everyone组分配Office安装的完整权限   目录它将工作。

不确定这是最好的想法,但它是Office 2010的已知问题。

编辑:here is one last resource

答案 1 :(得分:1)

如果应用程序未运行,GetObject将抛出错误。你需要检查一下:

On Error Resume Next
Set oOlAp = GetObject(, "Outlook.Application")
If Err.Number <> 0 Then Set oOlAp = New Outlook.Application

或者,您可以创建对象的新实例:

Set oOlAp = CreateObject("Outlook.Application")

当已初始化相同类型的对象时,使用CreateObject创建新实例将增加资源负载。换句话说,为了提高性能和降低系统资源的使用,最好使用第一个建议的解决方案。

答案 2 :(得分:0)

首先,在创建Outlook.Application对象的实例时始终使用CreateObject - Outlook是一个单例,因此只有一个实例将为登录用户运行。
其次,Outlook和Access的版本是什么?它们都是相同的版本&gt;?如果没有,它们都是32位还是64位?