-1

与 excel 的交互有效,但不能与 Outlook 互动

我可以在“用户是否登录”模式下在任务计划程序中安排以下任务,并且工作正常。(从VBS文件运行)

Sub runTaskTest()
   Dim erow As Long
    erow = Sheets(1).Cells(Rows.Count, "A").End(xlUp).Row
    Sheets(1).Cells(erow + 1, 1).Value = "This test was successful : " & Now
    ThisWorkbook.Saved = True
    ThisWorkbook.Save
End Sub

但是当我尝试使用excel vba 宏调度程序从Outlook发送自动电子邮件时,无法使用“用户是否登录”选项运行

Sub runTaskTest()
    
  Dim OutlookApp As Outlook.Application
  Dim OutlookMail As Outlook.MailItem

  Set OutlookApp = New Outlook.Application
  Set OutlookMail = OutlookApp.CreateItem(olMailItem)
  
  With OutlookMail
    .BodyFormat = olFormatHTML
    .Display
    .HTMLBody = "Dear ABC" & "<br>" & "<br>" & "Please find the attached file" & 
    .HTMLBody
    'last .HTMLBody includes signature from the outlook.
''<br> includes line breaks
 b/w two lines
    .To = "abc@gmail.com"
    .Subject = "Test mail"
    .Attachments = ThisWorkbook
    .Send
  End With

End Sub

VBScript

Option Explicit  
Dim xlApp
Dim xlBook

Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("D:\Excel_Test\excel_test.xlsm", 0, False)

xlApp.DisplayAlerts = False
xlApp.Visible = False

xlApp.Run "'excel_test.xlsm'!runTaskTest" // **
xlBook.Saved = True
xlBook.Save

xlBook.Close
xlApp.Quit

Set xlBook = Nothing
Set xlApp = Nothing

但是当我选择“仅在用户登录时运行”时,相同的代码工作正常

我尝试了以下解决方案,但没有任何帮助

  1. 在“C:\Windows\System32\config\systemprofile\Desktop”中创建了空文件夹,请在 此处输入链接描述

  2. 计算机被锁定时如何发送电子邮件?

  3. 检查运行任务的所有特权和权限(以批处理作业登录)

但没有任何帮助。请帮我解决这个问题。

4

1 回答 1

-1

如果您仅处理 Exchange 帐户,请考虑改用 EWS ,有关详细信息,请参阅探索 Exchange 中的 EWS 托管 API、EWS 和 Web 服务。

Office文章服务器端自动化的注意事项如下:

Microsoft 目前不推荐也不支持任何无人值守、非交互式客户端应用程序或组件(包括 ASP、ASP.NET、DCOM 和 NT 服务)的 Microsoft Office 应用程序自动化,因为 Office 可能表现出不稳定的行为和/或在此环境中运行 Office 时出现死锁。

如果您正在构建在服务器端上下文中运行的解决方案,您应该尝试使用已确保无人值守执行安全的组件。或者,您应该尝试找到允许至少部分代码在客户端运行的替代方案。如果您使用来自服务器端解决方案的 Office 应用程序,该应用程序将缺少许多成功运行所需的功能。此外,您将承担整体解决方案稳定性的风险。

您还可以考虑使用来自 Windows 服务或 Windows 调度程序运行的任务的 Outlook 基于的低级 API(扩展 MAPI)。例如,您可以考虑使用基于该 API 构建的任何第三方组件,例如 Redemption。

于 2021-09-07T16:37:04.663 回答