VBA 无法发送日历约会

Posted

技术标签:

【中文标题】VBA 无法发送日历约会【英文标题】:VBA can't send calendar appointment 【发布时间】:2011-11-28 02:43:45 【问题描述】:

当我手动进行日历提醒/约会时,我可以单击“邀请与会者”并选择要邀请的人员,然后单击“发送”,每个人都会收到该日历提醒/约会。

我有以下代码以编程方式发出提醒,但它不会发送给预期的收件人。如果我在脚本运行后打开提醒并单击“邀请与会者”,我可以看到列表中填满了我想向其发送提醒的人,所以我不确定为什么它实际上没有向其发送提醒他们。

谁能帮我解释一下?

Private Function CreateAppointment(SubjectStr As String, BodyStr As String, StartTime As Date, EndTime As Date, AllDay As Boolean)
    Dim olApp As Outlook.Application
    Dim Appt As Outlook.AppointmentItem
    ' Only create the reminder if there's no duplicate
    If (CheckForDuplicates(SubjectStr) = False) Then
        Set olApp = CreateObject("Outlook.Application")
        Set Appt = olApp.CreateItem(olAppointmentItem)
        Appt.Recipients.Add ("John Doe")
        Appt.Recipients.ResolveAll
        Appt.Subject = SubjectStr
        Appt.Start = StartTime
        Appt.End = EndTime
        Appt.AllDayEvent = AllDay
        Appt.Body = BodyStr
        Appt.ReminderSet = True
        Appt.Save
        Appt.Send
    End If
    Set Appt = Nothing
    Set olApp = Nothing
End Function

【问题讨论】:

嗯,是的,我明白你的意思了!刚试了一下。不知道为什么发不出去! +1 个有用的问题。 这里也一样。我看到了一个名为“SendUsingAccount”的属性,您可以在其中进行如下设置: Application.Session.Accounts(1) 。您将在保存项目之前执行此操作。它仍然没有效果。我更改了帐户(例如,在我的 pop3 而不是公司 Exchange 服务器上尝试过)。此外,我加载了 Windows 2000 和 Outlook XP 的虚拟实例并在那里进行了尝试。没有运气,也没有回应为什么它不起作用。 :P 有趣的是在 Windows 2000 上,我在发送线上收到一个安全弹出窗口,上面写着“这个应用程序即将尝试发送一些东西。你想允许吗?”我说允许,但不允许。 这比我设法做到的要好。宏安全性表示任何发送函数必须在发送前通知用户,所以你一定做了一些半正确的事情......希望有人会遇到这个并为我们解答。 代码工作正常,在 Outlook 2010 中测试。我删除了 If (CheckForDuplicates(SubjectStr) = False) Then If 语句,因为它没有列出。请注意,出于安全考虑,有些事情只能通过将您的代码放在“VbaProject.OTM”中来在 VBA 中完成。如果你把它放在别处,它会失败。 【参考方案1】:

会议是一种特定类型的约会——邀请其他人参加的约会。

要预约会议,您需要做的不仅仅是邀请与会者。您需要将状态设置为“会议”。将此添加到您的代码中:

Appt.MeetingStatus = olMeeting

另请注意,您设置了提醒,但没有设置提醒时间。例如,

Appt.ReminderMinutesBeforeStart = 30

最后,如果这是 Outlook VBA,为什么要使用 CreateObject?您应该使用本机应用程序对象来派生所有对象。

即而不是

Set olApp = CreateObject("Outlook.Application")

你会使用

Set olApp = Outlook.Application

HTH

【讨论】:

非常感谢 JP!没有意识到我需要将其设置为会议类型。【参考方案2】:

我遇到了同样的问题,直到我更换了它才能工作

Appt.Recipients.Add ("John Doe")
Appt.Recipients.ResolveAll

Appt.RequiredAttendees = "john.doe@email.com"

问候

克里斯

【讨论】:

以上是关于VBA 无法发送日历约会的主要内容,如果未能解决你的问题,请参考以下文章

是否有 VBA 方法可以在 Outlook 中创建新日历(不是约会)

使用VBA创建Outlook事件(不是约会!)

600 + 行 Excel 数据创建 Outlook 约会...但只创建一个约会

如何从日历数据库中获取可用时间段列表

如何通过 Excel 将约会添加到非默认日历

如何在outlook中发送定期的提醒邮件?例如每月一次或者每两周一次的邮件?