2017-04-03 98 views
1

我想使用VBA为用户Outlook日历添加约会,这两者都在执行宏的Outlook应用程序日历上显示,也存在于用户在交换服务器上共享文件夹(以便显示在用户的智能手机日历等中)。将约会添加到Outlook默认约会文件夹以及共享文件夹

目前我能做到非此即彼/或:

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 

当然,宏可以通过环和两个默认的日历文件夹,并在Exchange服务器文件夹中创建新的任命。然而,由于每个约会都被分配了自己的唯一ID,这将是一个真正的黑客(也就是说,我们最终以2个约会代表相同的事件,但每个约会具有不同的唯一ID)。

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

回答

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选项,但自从我发现这将为由宏创建的每个约会创建一个已发送邮件项目