Vba Outlook尚未打开时发送邮件
我的处境:Vba Outlook尚未打开时发送邮件,vba,outlook,Vba,Outlook,我的处境: Sub emailer() Dim OutApp As Object Dim OutMail As Object Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .to = "f@r.com" .CC = "" .BCC = "" .Subject = "This is the Subject line
Sub emailer()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.to = "f@r.com"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Body = "Hi there"
.Send 'or use .Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
我正在尝试在Outlook未打开时发送电子邮件。如果Outlook正在运行,此代码将正常工作。如果关闭Outlook,代码将创建一个不可见的进程,您可以看到该进程正在任务管理器中运行
代码在.Send
过程中遇到错误。它返回运行时错误287
根据我的经验,某些VBA方法只有在对象可见或处于活动状态时才有效
我的解决办法是在调用.Send
之前使用.Display(False)
调用.Send
后,它会立即终止Outlook进程。(请给我指出正确的方向,为什么。)然后电子邮件就卡在发件箱里了
我必须调用另一个CreateObject(“Outlook.Application”)
并在发件箱中循环,而发件箱.Items.Count>0
或
循环通过SyncObjects
并手动调用.Start
在发件箱上运行发送/接收
我的问题:
Sub emailer()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.to = "f@r.com"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Body = "Hi there"
.Send 'or use .Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
有没有一种方法可以直接使用.Send
方法,而不是在不必打开Outlook的情况下使用变通方法
我的代码:
Sub emailer()
Dim OutApp As Object
Dim OutMail As Object
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)
With OutMail
.to = "f@r.com"
.CC = ""
.BCC = ""
.Subject = "This is the Subject line"
.Body = "Hi there"
.Send 'or use .Display
End With
Set OutMail = Nothing
Set OutApp = Nothing
End Sub
Outlook关闭时.send问题的解决方法可能是更改发送/接收设置。进入文件->选项->高级->查找
发送/接收…
,然后按它。在“设置组“所有帐户”下,有一个复选框,用于在退出时执行自动发送/接收。。选中此复选框,可能会解决“您遇到的发件箱问题”
以下是一个屏幕截图:
尝试一下,希望能有所帮助。使用
名称空间。发送和接收
。请记住,发送/接收是异步的,您需要等待同步完成。您可以使用名称空间。SyncObjects
集合,使用SyncObject.start
启动同步,然后等待SyncObject.SyncEnd
事件
要防止Outlook关闭,您需要保留对Outlook资源管理器或检查器对象的实时引用。您可以使用命名空间.GetDefaultFolder
检索收件箱文件夹,然后使用MAPIFolder.GetExplorer
方法获取指向资源管理器对象的指针
更新:
您可能还希望确保在创建和发送邮件之前登录到MAPI配置文件
set NS = OutApp.GetNamespace("MAPI")
NS.Logon
Hi@Busse谢谢,但如果我使用
.Display
和组合,它只会卡住。我想要一个简单的.Send
。如果我只使用.Send
,我会遇到运行时错误287Ah,对不起。您如何调用此脚本?Outlook已关闭,您调用此脚本,它会创建一个新邮件项目,并尝试发送。S因为它正在打开它应该发送的进程。我在某个地方读到,这可能是一个计时问题,表明它试图发送得太快,所以他们在发送前增加了1秒的延迟。我在Excel中使用VBA,但我的程序实际上是用Python编写的。我在使用公开COM对象的pywin32
库。因此,这就像在Excel中运行VBA代码一样Python。我刚刚在VBA中创建了一个重复的代码,以确保它不是Python的问题。我尝试使用F8来运行代码,并在执行.Send
行之前暂停了很长时间,但它仍然不起作用。我想问题是,当Outlook不可见时,我无法使用。Send
。类似于Exce中的。粘贴l、 如果目标字段未激活,则无法使用。请尝试将“While Outbox.Items.Count>0”循环放在代码的“End With”后面“Line您知道为什么在没有资源管理器对象的情况下,.Send
不想工作吗?因为Outlook在有机会执行发送/接收之前就退出了。我不认为这是原因。当尝试执行.Send时,我仍然可以在资源监视器中看到Outlook.exe running它何时退出?它接收电子邮件吗?当新邮件处于隐藏状态时,您看到新邮件通知了吗?严格按照我原始问题中的代码操作。Outlook未打开时。当尝试执行.Send时,它将引发运行时错误287。所以它不会退出。是的,即使在隐藏状态下,我也会收到通知。如果我将代码保留在.Body行,它将接收邮件和通知。