使用任务计划程序通过VBA发送的电子邮件卡在发件箱中

时间:2016-06-06 22:12:11

标签: excel vba outlook-vba windows-server-2008-r2 taskscheduler

我有一些宏和任务计划程序在指定时间启动Excel,更新一些表,从这些表创建PDF文档,然后通过电子邮件将这些PDF文档发送给选定的个人。

有时,电子邮件会卡在发件箱中,直到我打开Outlook才会发送。

以下是发送电子邮件的代码:

[
    {
        "parent1-prop1", "parent1-prop2",
        "children": [
            {"child1-prop1", "child1-prop2"},
            {"child2-prop1", "child2-prop2"}
        ]
    },
    {
        "parent2-prop1", "parent2-prop2",
        "children": [
            {"child3-prop1", "child3-prop2"},
            {"child4-prop1", "child4-prop2"}
        ]
    }    
]

完成后,Private sub跳回到此工作簿中的宏,并使用CloseWorkbook Application退出MS Excel。

我的工具在Outlook的VBA设置中引用库:
Tools Reference Library settings

我的信任设置:
E-Mail Security Settings

宏设置:

“启用所有宏”已选中

“将宏安全设置应用于已安装的加载项”已选中

Macro Settings

我们的想法是让这个程序在清晨运行,并在他们进入工作时将这些电子邮件发送到选定个人的收件箱中。

2 个答案:

答案 0 :(得分:0)

Outlook与任何其他Office应用程序一样,无法在服务(例如计划程序)中运行。 话虽这么说,您需要强制Outlook执行SendReceive并等待它完成。致电Namespace.SendAndReceive或从SyncObject集合中检索第一个Namespace.SyncObjects对象,致电SyncObject.Start并等待SyncObject.SyncEnd事件触发。

答案 1 :(得分:0)

如果有人还在寻找答案;这实际上允许发送电子邮件而无需打开Outlook应用程序。

Dim mySyncObjects As Outlook.SyncObjects
Dim syc As Outlook.SyncObject
Set mySyncObjects = Outlook.Application.GetNamespace("MAPI").SyncObjects
Set syc = mySyncObjects(1)
syc.start
相关问题