home page

Spedire un messaggio di posta elettronica automaticamente da Office.

Le applicazioni facenti parte del pacchetto Microsoft Office hanno un linguaggio di programmazione in comune, il Visual Basic.
I programmi scritti in Visual Basic vengono normalmente salvati insieme ai documenti.
Un esempio di applicazione interessante che agevola il lavoro di gruppo e la propria organizzazione personale è quella di poter inviare un messaggio di posta elettronica automaticamente, ovvero quando succede un certo "evento". Per esempio, quando un documento viene aperto, salvato, modificato in un certo modo, stampato ecc. si può attivare un messaggio che notifica qualcuno (o anche l'esecutore, perché no) di tale evento con dettagli e dati tratti dal documento in questione.
Per accedere alla zona del Visual Basic da un programma Office, bisogna attivare il menù Strumenti - Macro - Visual Basic Editor (per Excel, vedere figura seguente)

Siete entrati nella parte della programmazione in Visual Basic.
Create un nuovo modulo (uno spazio per scrivere un programma) col menu' Inserisci, opzione Modulo:

Ora siete pronti per scrivere una applicazione in Visual Basic. Tenete presente che quello che fate viene salvato insieme al documento Excel/Word/Access, quindi attenti a salvare il documento alla fine se ci tenete a quello che avete scritto.
Riporto in fondo alla pagina il listato di una routine, che può essere copiata ed incollata, che quando viene eseguita da una qualunque applicazione di Office (Excel, Word, Access, Outlook) spedisce un messaggio di posta elettronica (in questo caso, al sottoscritto; così avrò vostre notizie. Non esagerate con le prove o cambiate prima il contenuto della variabile Destinatario). Funziona sia con gli utenti della posta interna al workgroup (Microsoft Mail) che con quella Internet. L'applicazione come io l'ho sviluppata utilizza servizi e routines di Outlook, pertanto Outlook deve essere installato. Inoltre, occorre attivare una sola volta per ogni documento, fra i riferimenti, la "libreria ad oggetti" di Outlook. Attivate col menù "Strumenti" opzione "Riferimenti" dell'Editor di Visual Basic la seguente finestra e marcate la casella corrispondente alla "Microsoft Outlook Object Library" come da figura. Vi eviterà che il programma segnali un errore tipo "metodo Add fallito" durante l'esecuzione:

Per suggerimenti, aiuto, critiche e soprattutto applicazioni personalizzate a prezzi modici, sono a disposizione.
Segue listato del programma tra le due righe orizzontali. Per poterlo riportare nell'editor di Visual Basic di Outlook si può semplicemente evidenziare quanto sotto, copiare ed incollare.


Dim ApplOutlook, Task, Dummy2, SuperCartella, CartellaDiCreazione, Allegato As Object
Dim Dummy As Variant

Sub CreaMessaggio()
'Assegnazione variabili. Personalizzatevele!
Destinatario = "pankaldi@libero.it"
Oggetto = "Tanti saluti!"
CorpoDelMessaggio = "Questo messaggio è stato creato automaticamente da un programma in Visual Basic"
Cartella = "Posta in uscita"
'Main
Set ApplOutlook = CreateObject("Outlook.Application")
Set SuperCartella = ApplOutlook.GetNamespace("MAPI")
Set CartellaDiCreazione = SuperCartella.Folders(1).Folders(Cartella)
'l'item viene creato col modello assegnato alla CartellaDiCreazione
Set Task = CartellaDiCreazione.Items.Add(olMailItem)
'viene creato un item del tipo definito dal parametro ol.. che deve essere
'congruente con la cartella di crazione
'attenzione: se il programma si blocca su questa istruzione
'significa che occorre aggiungere la libreria ad oggetti di Outlook tra i riferimenti
With Task
  'da qui in poi vengono definite le proprietà dell'item
  'Set Dummy = .Assign() ' questa istruzione, applicata ad un elemento olTaskItem assegna l'attivita'
  'a qualcuno e task viene trasformato in on oggetto di tipo TaskRequestItem
  Set Dummy2 = .Recipients.Add(Destinatario) 'viene aggiunto un destinatario all'item
  '(che e' la persona a cui viene mandato il messaggio o assegnato un eventuale task
  .Subject = Oggetto
  'Set Allegato = .Attachments
  'Allegato.Add Application.ActiveWorkbook.FullName, olByReference, 1, "nome dell'allegato nel messaggio"
  .Body = CorpoDelMessaggio
  End With
' Task.Display ' viene mostrata la finestra per editing
Task.Send

'distruzione oggetti
Set ApplOutlook = Nothing
Set Task = Nothing
Set Dummy = Nothing
End Sub

 


home page