Finalità
In questo articolo viene presentato un esempio di codice VBA da utilizzare per intervenire sul calendario e che disattiva i promemoria impostati per i compleanni che vengono inseriti automaticamente durante la compilazione dei Contatti (se si compila la data di nascita di un Contatto Outlook provvede a creare automaticamente un evento ricorrente che ricorda il compleanno).
Questa procedura è comoda soprattutto per chi sincronizza abitualmente il Calendario di Outlook con il proprio telefono/palmare e vuole evitare che ogni volta, alle 23:45 (quindi in orario poco piacevole) venga generato l'allarme di promemoria.
Si potrebbe anche usare una variante di questo codice per modificare il promemoria (anziché disattivarlo) affinché l'evento venga segnalato qualche giorno prima al posto dei canonici 15 minuti e fornire così un tempo adeguato per l'eventuale ricerca del regalo o per inviare con anticipo gli auguri.
Breve descrizione della procedura
Il codice è scritto all'interno di una procedura indipendente, e per finalità didattiche non è particolarmente ottimizzato.
La procedura, dopo aver dichiarato le variabili necessarie, effettua un loop su tutti gli elementi del Calendario di default di Outlook. Se il singolo elemento ha un oggetto che inizia con la parola "Compleanno" allora l'elemento viene modificato.
Prima di intervenire bisogna effettuare un controllo ed accertarsi che l'evento non sia un elemento ricorsivo, altrimenti c'è il rischio di modificare solamente una ricorrenza (un solo anno e non tutti gli altri). Verificato se si tratta di una ricorrenza o di un evento singolo il codice provvede a modificare la proprietà .ReminderSet (rispettivamente sul record master utilizzato dall'intera serie oppure sull'evento singolo).
La proprietà .ReminderSet può contenere un valore booleano (TRUE o FALSE) e per disattivarlo è sufficiente impostare il valore a FALSE. Dopo la modifica della proprietà è necessario salvare l'item modificato.
Al termine della procedura viene presentata una finestra di dialogo che indica la fine del processo ed informa su quanti compleanni è stata effettuata la modifica.
Sub EliminaPromemoriaCompleanni()
'La procedura disattiva i promemoria di tutti i
' compleanni presenti nel Calendario di Outlook.
Dim objApp As Application
Dim objNS As NameSpace
Dim objFolder As MAPIFolder
Dim objItem As AppointmentItem
Dim objMasterApp As AppointmentItem
Dim i As Long 'contatore dei record modificati.
'Recupera i riferimenti del Calendario principale.
Set objApp = CreateObject("Outlook.Application")
Set objNS = objApp.GetNamespace("MAPI")
Set objFolder = objNS.GetDefaultFolder(olFolderCalendar)
'Verifica tutti gli appuntamenti del calendario.
For Each objItem In objFolder.Items
'Se l'appuntamento/evento inizia con la
' parola COMPLEANNO allora interviene.
If Left$(objItem.Subject, 10) = "Compleanno" Then
'Verifica se si tratta di un evento ricorrente,
' nel qual caso modifica il record master
If objItem.IsRecurring Then
Set objMasterApp = objItem.GetRecurrencePattern.Parent
If objMasterApp.ReminderSet = True Then
'Modifica la proprietà del promemoria.
objMasterApp.ReminderSet = False
'Salva l'appuntamento modificato.
objMasterApp.Save
'Aggiorna il contatore record modificati
i = i + 1
End If
Else
'Se l'appuntamento non è ricorrente lo modifica direttamente.
If objItem.ReminderSet = True Then
'Modifica la proprietà del promemoria.
objItem.ReminderSet = False
'Salva l'appuntamento modificato.
objItem.Save
'Aggiorna il contatore record modificati
i = i + 1
End If
End If
End If
Next objItem
'Pulizia riferimenti
Set objMasterApp = Nothing
Set objItem = Nothing
Set objFolder = Nothing
Set objNS = Nothing
Set objApp = Nothing
'Segnala la fine della procedura.
MsgBox "La procedura di correzione dei promemoria è finita." _
& "Sono stati modificati " & i & " appuntamenti." _
, vbExclamation, "Disattiva promemoria compleanni"
End Sub