从Access中的VBA调用时,Outlook.exe进程未结束

时间:2014-05-28 16:55:42

标签: vba ms-access outlook-vba

我在Access 2007中打开一个表单,在Outlook打开时打开,以下代码在Form_Load()事件中:

Dim objOL As New Outlook.Application
Dim objMail As MailItem
Set objOL = New Outlook.Application
Set objMail = objOL.CreateItem(olMailItem)

msg = "This is a test"

bdy = "<p style='font-family: Calibri; font-size:11pt'>This is just a test</p>"

rec = "me@myemail.com"

With objMail
    .To = rec
    .Subject = msg
    .HTMLBody = bdy
    .Display
    .Send
End With

Set objMail = Nothing
Set objOL = Nothing

Application.Quit

代码有效,意味着发送电子邮件并关闭Access。 MSACCESS.EXE进程从Windows任务管理器(Windows 7)中消失,但OUTLOOK.EXE进程保持打开状态,CPU处于25%,直到内存使用量达到约500MB。此时,进程的CPU使用率降至0%但不会退出。我让它过夜,这个过程永远不会退出。

经过一些测试,似乎问题是我从Windows任务计划程序启动的批处理文件中启动Access。批处理文件包含:

`Start "C:\Program Files (x86)\Microsoft Office\Office12\MSAccess.exe" c:\myDb.accdb`

如果我只是双击.bat文件,或手动打开.accdb文件,则OUTLOOK.EXE将与MSACCESS.EXE一起关闭

我在这里缺少什么?我遇到的大多数示例代码看起来都像我的代码。

更新

对于每个用户tbur,解决方案是“在任务计划程序中,确保在”常规“选项卡下,”只有在用户登录时才运行“并且”选中了以最高权限运行“。 ”

不是我想要的解决方案,但确实解决了问题。现在的问题是运行此代码的Windows 7 PC将在Windows更新后重新启动,并且大多数任务计划在半夜运行。

2 个答案:

答案 0 :(得分:1)

objOL.Quit

objOL设置为Nothing只会释放引用,即切断objOL与Outlook应用程序之间的关系;它不会关闭应用程序。

答案 1 :(得分:1)

尝试此操作(在代码末尾):
objOL.Quit