我目前在通过excel vba自动发送电子邮件时遇到问题? 我有一个简单的例子:
Sub sendOutlookEmail()
Dim oApp As Outlook.Application
Dim oMail As MailItem
Set oApp = CreateObject("Outlook.application")
Set oMail = oApp.CreateItem(olMailItem)
oMail.Body = "Body of the email"
oMail.Subject = "Test Subject"
oMail.To = "someone@somewhere.com"
oMail.Send
Set oMail = Nothing
Set oApp = Nothing
End Sub
当Outlook客户端打开时,这可以正常工作。当outlook关闭时,我收到以下错误:
错误287:应用程序定义或对象定义的错误
现在,如果我在oMail.Send命令上面添加一行无关紧要的代码:
Debug.Print oApp.Session.Accounts.Item(1).DisplayName
现在,无论Outlook打开还是关闭,代码都能正常运行。
我知道当Outlook关闭并使用LDAP时,需要Windows身份验证才能通过OLE自动发送电子邮件,但由于额外的代码是不变的子例程。我相信这是关于Outlook.application.Session.Account默认对象初始化的某种错误。
你能帮忙解决这个问题吗?这是一个LDAP问题还是一个Outlook.Application类问题,这是一个来自VB应用程序的复制错误,我无权访问源代码,但行为方式和报告方式相同同样的错误。
谢谢
答案 0 :(得分:3)
此处说明了此行为的原因:
http://msdn.microsoft.com/en-us/library/office/ff861594%28v=office.15%29.aspx
代码示例 -
' Start Outlook.
Dim olApp As Outlook.Application
Set olApp = CreateObject("Outlook.Application")
' Get a session object.
Dim olNs As Outlook.NameSpace
Set olNs = olApp.GetNamespace("MAPI")
' Create an instance of the Inbox folder.
' If Outlook is not already running, this has the side
' effect of initializing MAPI.
Dim mailFolder As Outlook.Folder
Set mailFolder = olNs.GetDefaultFolder(olFolderInbox)
' Continue to use the object model to automate Outlook.
“从Outlook 2010开始,如果您有多个配置文件,您已将Outlook配置为始终使用默认配置文件,并且使用登录方法登录默认配置文件而不提示用户,则用户将收到提示无论如何都要选择配置文件。要避免此行为,请不要使用Logon方法;请使用前面的InitializeMAPI示例中建议的解决方法。“*
Microsoft称之为“解决方法”的方法是简单地向Namespace对象发出声明。这初始化MAPI。看来,当通过OLE接口远程通信时,Outlook应用程序对象可能不可见,并且可能不会显示选择配置文件的提示,从而显示没有任何事情发生。
感谢Mark帮我确定问题。
Tom Feuerstake
答案 1 :(得分:0)
尝试添加对Namespace.Logon的调用:
Set oApp = CreateObject("Outlook.application")
set oNS = oApp.GetNamespace("MAPI")
oNS.Logon