我有一个代码,每天早上收到特定电子邮件时就会运行。 该代码将更新SQL表,打开Excel文件并在其中运行宏。 通过触发脚本的规则来调用代码。
“问题”是:如果Outlook保持打开状态,直到第二天调用同一代码时,我将收到错误消息“远程服务器计算机不存在或不可用”,因此解决方案是关闭Outlook应用程序稍后再重新打开。由于它运行在我没有足够权限通过“任务计划程序”运行脚本的服务器上,因此我需要:在代码完成后安排自动关闭Outlook,或者每天手动关闭Outlook(包括周末:)
很显然,我试图在代码中插入此任务,但是它永远无法正常工作。它也从不显示任何错误。它只是忽略了退出应用程序的命令。
Sub RunReports(MyMail As MailItem)
Dim strID As String
Dim objMail As Outlook.MailItem
Dim AttFile As Outlook.Attachment
Dim emDateTime As Date
Dim WhereToSaveAttachment As String
Dim FileAddr As String
Dim ExApp As Excel.Application
Dim ExWbk As Workbook
strID = MyMail.EntryID
Set objMail = Application.Session.GetItemFromID(strID)
Subj = objMail.Subject
emDateTime = objMail.ReceivedTime
WhereToSaveAttachment = "\network_address"
Set ExApp = Excel.Application
For Each AttFile In objMail.Attachments
FileAddr = WhereToSaveAttachment & "\" & AttFile.DisplayName
AttFile.SaveAsFile FileAddr
Set ExWbk = ExApp.Workbooks.Open("x:\filename1.xlsm")
Result = ExWbk.Application.Run("filename1.xlsm!FillingReportData", FileAddr, objMail.SentOn)
ExWbk.Close True
Set ExWbk = Nothing
Next
Set ExApp = Nothing
If Len(FileAddr) > 2 Then Kill FileAddr
Set objMail = Nothing
Set ExApp = Nothing
Set ExApp = Excel.Application
Set ExWbk = ExApp.Workbooks.Open("\\address\filename2.xlsm")
ExWbk.Application.Run ("RunAllReports")
ExWbk.Close True
Set ExWbk = Nothing
Set ExApp = Nothing
Application.Quit
有人可以建议吗?
答案 0 :(得分:0)
只是棘手。在此过程的最后一部分,修改宏以将调用添加到BAT文件。该BAT文件必须包含以下文本:
TASKKILL /IM OUTLOOK.EXE /F
。
要创建此BAT文件,只需创建一个普通的TXT,然后将扩展名更改为BAT。将其命名为CLOSE OUTLOOK.BAT
要从VBA调用文件,只需使用:
Shell ("c:\fULLPATHTOFILE\CLOSE OUTLOOK.BAT")
DoEvents
这将强制关闭Outlook。然后使用普通的Application.Quit
完成Excel。
尝试一下。