我有几行代码工作了一年,但在过去的10天里没有工作。
如果我尝试创建一个新的Outlook对象,将显示此消息:
的数据
Dim OutlookApp As Object
Dim OutlookMail As Object
Set OutlookApp = CreateObject("Outlook.Application")
Set OutlookMail = OutlookApp.CreateItem(0)
With OutlookMail
.To = [email protected]
.Subject = "Subject"
.HTMLBody = "Body"
.Display
End With
字符串
尝试创建Outlook示例时出现错误:
Set OutlookApp = CreateObject("Outlook.Application")
型
我以管理员身份运行Outlook应用程序。
我试着用另一种方式创建电子邮件,但没有成功:
Dim OutlookApp As Object
Dim OutlookMail As Object
On Error Resume Next
Set OutlookApp = GetObject(, "Outlook.Application")
On Error GoTo 0
If OutlookApp Is Nothing Then
Set OutlookApp = CreateObject("Outlook.Application")
End If
Set OutlookMail = OutlookApp.CreateItem(0) ' 0 represents olMailItem
型
2条答案
按热度按时间1szpjjfi1#
您的错误并没有说它无法启动Outlook,因为它已经在运行,它说它无法启动不同的版本。现在这有点误导:它无法启动Outlook,因为已经有一个正在运行 * 在不同的上下文中 *(具有管理员权限)。
这只是一个有根据的猜测,但我假设Outlook打开资源(例如文件),它不能在运行不同权限的多个示例上共享这些资源。
如果您查看任务管理器:如果您以“正常”方式启动Outlook并执行
CreateObject("Outlook.Application")
,则看不到新的Outlook任务。我假设返回已运行的示例。但是,无法返回以不同权限运行的示例,否则调用代码(在您的情况下为Excel)将获得管理员权限。第二次尝试使用GetObject(, "Outlook.Application")
时也是如此。一个解决办法是以管理员身份运行Excel。但从安全方面来看,以管理员身份执行Excel代码听起来是个糟糕的主意。
zpjtge222#
Outlook是一个单例,因此当
Outlook.Application
对象被创建时,outlook.exe的新示例会检查是否有另一个示例正在运行并将控制权转移给它。如果第一个示例挂起或在不同的安全上下文中运行(例如,其中一个以管理员身份运行,另一个以普通用户身份运行),则会出现问题。如果您遇到此错误,请打开任务管理器,检查outlook.exe是否正在运行,右键单击“结束任务”。