2017-04-03 2 views
1

Je souhaite ajouter un rendez-vous au calendrier Outlook des utilisateurs à l'aide de VBA, qui s'affiche dans le calendrier des applications Outlook à partir duquel la macro est exécutée. les utilisateurs partagent le dossier sur le serveur d'échange (de sorte qu'il soit affiché sur le calendrier de smartphone de l'utilisateur etc.).Ajout d'un rendez-vous au dossier de rendez-vous Outlook par défaut et au dossier partagé

Au moment où je peux obtenir soit/ou:

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 

Bien sûr, la macro pourrait boucle à travers et créer de nouveaux rendez-vous tant dans le dossier de calendrier par défaut et le dossier du serveur d'échange. Cependant, étant donné que chaque rendez-vous se voit attribuer son propre identifiant unique, ce serait un véritable hack (c'est-à-dire que nous nous retrouverions avec 2 rendez-vous représentant le même événement, mais chacun avec un identifiant unique différent).

Existe-t-il un moyen d'ajouter la même instance de rendez-vous à la collection de dossiers de defaultFolder et de sharedDefaultFolder? Si non, y a-t-il un bon moyen de s'assurer que les deux versions du rendez-vous sont des clones exacts, avec les mêmes identifiants uniques, etc.?

Répondre

1

L'élément de rendez-vous dans Outlook a une méthode CopyTo je ne connaissais pas, donc après la sauvegarde, appelant cette méthode et la copie dans le dossier d'échange semble avoir résolu mes problèmes

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

cette réponse avait à l'origine l'option olCopyAsAccept, mais j'ai depuis découvert que cela créera un élément de courrier envoyé pour chaque rendez-vous créé par la macro