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

Ms access 访问宏以从MS Outlook读取电子邮件,ms-access,outlook,vba,instance,Ms Access,Outlook,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

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
自从我创建并彻底测试代码以来,代码中没有任何变化


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

你可能看到了一个一直存在的问题,只是以前从未因为任何原因遇到过

您可能希望尝试添加回退,以确保应用程序正在运行:

    On Error Resume Next
    Set objOutlook = GetObject(, "Outlook.Application")
    If Err.Number = 429 Then
        Set objOutlook = CreateObject("Outlook.Application") 
    End If
从同一个讨论中,需要注意的是,Outlook 2010在未以管理员模式启动时,在ROT中注册显然存在某种问题

某人发布的内容包括:

…如果您将Everyone组的完全权限分配给Office安装 然后它将工作

不确定这是否是最好的想法,但这是Office 2010的一个已知问题


编辑:。

如果应用程序未运行,GetObject将抛出错误。您需要检查以下内容:

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

当然,在相同类型的对象已经初始化的情况下,使用
CreateObject
创建新实例会增加资源负载。换言之,为了提高性能和降低系统资源的使用,最好使用第一个建议的解决方案。

首先,在创建Outlook实例时始终使用CreateObject。应用程序对象-Outlook是一个单一实例,因此登录用户只会运行一个实例。

第二,Outlook和Access的版本是什么?它们是否都是相同的版本>?如果不是,它们都是32位还是64位?

谢谢你的回复,但是我已经尝试过微软的那些建议,没有一个解决了这个问题。我会考虑把这个信息添加到这个问题中。谢谢谢谢,但是无论Outlook是否正在运行,GetObject和CreateObject都不会工作,并且都会抛出完全相同的错误。我很感谢您的回复,但不幸的是,在尝试实现这些建议中的每一个之后,我无法使其再次工作。应用程序在GetObject或CreateObject上不断失败。如果我使用Excel.application而不是Outlook.application,则GetObject命令工作正常。。。这可能与权限/安全性有关吗?请记住,我已经实现了将所有人添加到Office安装文件夹的解决方法。这当然是可能的。似乎没有人知道如何让outlook摆脱困境。我看到过一些地方,他们建议查找outlook.Application.14 for 2010等等,但这增加了检查单个版本的开销。我也读过这方面的内容,通过挖掘,我找到了与此错误相关的内容。我可以通过将MS Outlook的版本添加到命令(Outlook.Application.14)来运行它,但GetObject仍然无法工作,因此我必须在Outlook关闭的情况下运行宏。您好,Dmitry。谢谢你的回答,但我有点不同意。我可以向您证明,对于MS outlook 2010,可以同时运行多个实例。无论如何,它们都是2012、32。只有当它们在不同的用户上下文中运行,或者其中一个实例已挂起,而另一个实例正在等待挂起的实例重新激活时,它们才是。
Set oOlAp = CreateObject("Outlook.Application")