VBA: disattivare il promemoria per i compleanni

Lunedì 19 Maggio 2008 01:00 Roberto
Stampa

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
 

Tags:

Articoli correlati

Ultimo aggiornamento ( Venerdì 03 Settembre 2010 16:38 )