Excel中的对象错误:“一次只能运行一个版本的Outlook,”

xiozqbni  于 2023-11-20  发布在  其他
关注(0)|答案(2)|浏览(249)

我有几行代码工作了一年,但在过去的10天里没有工作。
如果我尝试创建一个新的Outlook对象,将显示此消息:


的数据

  1. Dim OutlookApp As Object
  2. Dim OutlookMail As Object
  3. Set OutlookApp = CreateObject("Outlook.Application")
  4. Set OutlookMail = OutlookApp.CreateItem(0)
  5. With OutlookMail
  6. .To = [email protected]
  7. .Subject = "Subject"
  8. .HTMLBody = "Body"
  9. .Display
  10. End With

字符串
尝试创建Outlook示例时出现错误:

  1. Set OutlookApp = CreateObject("Outlook.Application")


我以管理员身份运行Outlook应用程序。
我试着用另一种方式创建电子邮件,但没有成功:

  1. Dim OutlookApp As Object
  2. Dim OutlookMail As Object
  3. On Error Resume Next
  4. Set OutlookApp = GetObject(, "Outlook.Application")
  5. On Error GoTo 0
  6. If OutlookApp Is Nothing Then
  7. Set OutlookApp = CreateObject("Outlook.Application")
  8. End If
  9. Set OutlookMail = OutlookApp.CreateItem(0) ' 0 represents olMailItem

1szpjjfi

1szpjjfi1#

您的错误并没有说它无法启动Outlook,因为它已经在运行,它说它无法启动不同的版本。现在这有点误导:它无法启动Outlook,因为已经有一个正在运行 * 在不同的上下文中 *(具有管理员权限)。
这只是一个有根据的猜测,但我假设Outlook打开资源(例如文件),它不能在运行不同权限的多个示例上共享这些资源。
如果您查看任务管理器:如果您以“正常”方式启动Outlook并执行CreateObject("Outlook.Application"),则看不到新的Outlook任务。我假设返回已运行的示例。但是,无法返回以不同权限运行的示例,否则调用代码(在您的情况下为Excel)将获得管理员权限。第二次尝试使用GetObject(, "Outlook.Application")时也是如此。
一个解决办法是以管理员身份运行Excel。但从安全方面来看,以管理员身份执行Excel代码听起来是个糟糕的主意。

zpjtge22

zpjtge222#

Outlook是一个单例,因此当Outlook.Application对象被创建时,outlook.exe的新示例会检查是否有另一个示例正在运行并将控制权转移给它。如果第一个示例挂起或在不同的安全上下文中运行(例如,其中一个以管理员身份运行,另一个以普通用户身份运行),则会出现问题。
如果您遇到此错误,请打开任务管理器,检查outlook.exe是否正在运行,右键单击“结束任务”。

相关问题