我刚刚升级到Windows 10.这个版本的Outlook我启用了信任中心的宏,但它限制了我从outlook运行vba。当我运行任务调度程序并从bat文件运行访问数据库时,访问也会出现问题。一个autoexec excutes,我告诉系统关闭outlook,但它不会关闭当前的outlook实例。这是我正在使用的代码。
Public Function OutlookClose1()
On Error Resume Next
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Outlook.exe'")
For Each objProcess In colProcessList
Set objOutlook = GetObject(Class:="Outlook.application")
objOutlook.Quit
Next
End Function
Public Function OutlookClose2()
Dim objAppOL As Outlook.Application
On Error Resume Next
Set objAppOL = GetObject(Class:="Outlook.application")
objAppOL.Quit
Set objAppOL = Nothing
Exit Function
End Function
我尝试过outlookclose1和2,但都没有工作。有没有人有建议?
同样,当从vba编辑器运行outlookclose1时,它会关闭。它需要离线交换,这是我不想要的。但是从运行访问数据库的bat文件中运行autoexec并没有关闭outlook。
答案 0 :(得分:0)
任务计划程序在与当前登录用户不同的安全上下文中作为服务运行,即使本地用户帐户相同也是如此。 COM系统拒绝在不同安全上下文中运行的进程之间编组调用。
答案 1 :(得分:0)
我有办公室2013和Windows 10.我可以在Windows 7和任务调度程序上使用上面的代码。我所处的域名包含某些政策,我无法修改,也没有管理员权限。在家里不在域名上我也可以使用该代码。有了这个说,我至少可以从访问中终止outlook并完成关闭outlook会话的工作,所以当autoexec在访问数据库中运行时它关闭outlook然后运行报告并发送,Create Object Outlook.Application并发送电子邮件没问题。这是我如何终止代码。原因是我不希望多个Outlook会话在运行。
Public Function OutlookClose1()
Dim objOutlook As Outlook.Application
delay = 30000 'delay in milliseconds to let Outlook close gracefully
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colProcessList = objWMIService.ExecQuery _
("Select * from Win32_Process Where Name = 'Outlook.exe'")
For Each objProcess In colProcessList
objProcess.Terminate
Next
Set objWMIService = Nothing
Set objOutlook = Nothing
Set colProcessList = Nothing
End Function