2016-10-24 1 views
0

Comment mettre à jour/modifier des rendez-vous de calendrier existants en utilisant VBA? Pourquoi le code VBA suivant ne parvient pas à mettre à jour le sujet?Comment mettre à jour un appoiment Outlook en utilisant VBA?

VBA sous:

Sub failToEditAppointment() 
    Dim oSession As Variant 
    Set oSession = Application.Session 
    Dim oCalendar As Variant 
    Set oCalendar = oSession.GetDefaultFolder(olFolderCalendar) 
    Dim oItems As Variant 
    Set oItems = oCalendar.Items 

    oItems.IncludeRecurrences = False 
    oItems.Sort "[Location]" 

    Debug.Print oItems(1).Subject 
    oItems(1).Subject = "foo" 
    Debug.Print oItems(1).Subject 
    oItems(1).Save 
    Debug.Print oItems(1).Subject 
End Sub 

Sortie:

la Saint Valentin

la Saint Valentin

la Saint Valentin

Répondre

1

Vous modifier et d'enregistrer différents objets - chaque fois que vous appelez oItems.Item(i), vous récupérez un tout nouvel objet COM qui n'est pas garanti pour savoir quoi que ce soit sur les autres instances de cet objet. Parfois, Outlook met en cache le dernier objet utilisé, parfois ce n'est pas le cas. Stockez l'article dans une variable dédiée. Sur une note plus générale, la notation par points multiples (comme oItem.Item (1)) est toujours une mauvaise idée.

Dim oItem As Object 

oItems.IncludeRecurrences = False 
oItems.Sort "[Location]" 
set oItem = oItems(1) 
Debug.Print oItem.Subject 
oItem.Subject = "foo" 
Debug.Print oItem.Subject 
oItem.Save 
Debug.Print oItem.Subject 
0

Semble fonctionner si vous définissez l'élément sur une variable de type AppointmentItem.

Sub failToEditAppointment() 
    Dim oSession As Variant 
    Set oSession = Application.Session 
    Dim oCalendar As Variant 
    Set oCalendar = oSession.GetDefaultFolder(olFolderCalendar) 
    Dim oItems As Variant 
    Set oItems = oCalendar.Items 

    oItems.IncludeRecurrences = False 
    oItems.Sort "[Location]" 

    Dim appointment As AppointmentItem 
    Set appointment = oItems(1) 
    Debug.Print appointment.Subject 
    appointment.Subject = "foo" 
    Debug.Print appointment.Subject 
    appointment.Save 
    Debug.Print appointment.Subject 
End Sub 

Sortie:

la Saint Valentin

foo

foo