从 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 查询