将约会添加到Outlook默认约会文件夹以及共享文件夹

时间:2017-04-03 01:56:56

标签: vba outlook outlook-vba outlook-2010

我想使用VBA向用户Outlook日历添加约会,这些日历都显示在执行宏的Outlook应用程序日历上,并且也存在于Exchange服务器上的用户共享文件夹中(因此它是显示在用户的智能手机日历等)。

目前我可以实现/或:

Set myOlApp = Application
Set myNamespace = myOlApp.GetNamespace("MAPI")
Set myFolder = myNamespace.GetDefaultFolder(olFolderCalendar)
Set exchFolder = myNamespace.GetSharedDefaultFolder(myOlApp.Session.CurrentUser, olFolderCalendar)
...

Set myAppointment = myOlApp.CreateItem(olAppointmentItem) 'shows in the executing application calendar
'OR
Set myAppointment = exchFolder.items.add(olAppointmentItem) 'shows in the smartphone calendar
'then set whatever details we want for the appointment
With myAppointment
    .ReminderSet = False
    .AllDayEvent = False
    .Sensitivity = olNormal
    .Subject = "on call"
    .Start = onCall(i).Begin
    .Duration = onCall(i).Duration
    .Save
End With

当然,宏可以在默认日历文件夹和交换服务器文件夹中循环并创建新约会。但是,如果为每个约会分配了自己的唯一ID,那么这将是一个真正的黑客(也就是说,我们最终会有2个约会代表同一个事件,但每个约会都有不同的唯一ID)。

有没有办法将相同的约会实例添加到defaultFolder和sharedDefaultFolder的文件夹集合中?如果没有,是否有一种很好的方法可以确保两个版本的约会都是精确的克隆,具有相同的唯一标识符等?

1 个答案:

答案 0 :(得分:1)

outlook中的约会项目有一个我不知道的CopyTo方法,因此在保存之后,调用此方法并复制到exchange文件夹似乎已经解决了我的问题

Set myAppointment = myOlApp.CreateItem(olAppointmentItem)
With myAppointment
    'all the properties we wish to assign here
    .Save
    .CopyTo exchFolder, olCreateAppointment
End With

这个答案最初有olCopyAsAccept选项,但我发现这将为宏创建的每个约会创建一个已发送的邮件项目