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

Posted

技术标签:

【中文标题】从 Access 中的 VBA 调用时 Outlook.exe 进程未结束【英文标题】:Outlook.exe process not ending when called from VBA in Access 【发布时间】:2014-05-28 16:55:42 【问题描述】:

我在 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 更新后重新启动,并且大部分任务计划在半夜运行。

【问题讨论】:

【参考方案1】:
objOL.Quit

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

【讨论】:

我试过了,将它添加到Application.Quit 行的正上方,现在 MSACCESS.EXE 进程也没有结束。但仅当从 Windows 任务计划程序启动 Access 时。如果我打开 .accdb 文件,一切都会正常退出。 在任务计划程序中,确保在“常规”选项卡下,您已选中“仅在用户登录时运行”和“以最高权限运行”。 @tbur - 这确实解决了我的问题。我将其设置为“无论用户是否登录都运行”,因为它所在的 PC 在 Windows 更新后倾向于自行重启。我是否使用objOL.Quit 似乎也无关紧要,但我会把它留在那里以防万一。 @Jeff Brady 我很高兴修复了它!那个故障在过去让我很伤心。【参考方案2】:

试试这个(在代码末尾):objOL.Quit

【讨论】:

以上是关于从 Access 中的 VBA 调用时 Outlook.exe 进程未结束的主要内容,如果未能解决你的问题,请参考以下文章

无法使用 RunCode 从 Access 宏中调用我的 VBA 例程

从 C#.NET 应用程序调用 MS Access 中的 VBA 代码

如何从同一数据库的 VBA 代码中的 MS ACCESS 中提取字段

当未从多个选择框之一中选择项目时,基于 Access 中的多个“多个选择列表框”的 VBA 查询

无法从 Excel 中的 VBA 查询连接到 Access 数据库

从 Excel 调用 Access VBA 函数