Scegliere il mittente di un’email inviata con VBA
di Alessandra Salvaggio - Giovedì 18 Marzo 2010 alle 15:13
Una novità interessante introdotta con il VBA di Office 2007, e mantenuta in Office 2010, è la possibilità di inviare email attraverso VBA utilizzando Outlook e specificando l’account da cui si vuole inviare la email.
Anche con Office 2003 si potevano inviare email comandando Outlook tramite VBA, ma senza specificare l’account dal quale le email dovevano partire. L’email veniva inviata sempre e comunque dall’account principale. Ora, grazie alla introduzione della proprietà SendUsingAccount dell’oggetto email le cose sono cambiate.
Prima di proporre il codice che esegue questa operazione, ricordiamo che si possono inviare email tramite Outlook da tutte le applicazioni Office, non solo da Outlook stesso. Basta aggiungere, nell’editor di VBA del file da cui si vuole inviare l’email la libreria Microsoft Outlook. Per aggiungere la libreria, nell’editor di VBA, basta scegliere Strumenti > Riferimenti e selezionare la libreria necessaria dalla finestra che si presenta.
Una volta individuato l’evento che avvierà l’invio dell’email, basta completare come segue la routine che gestisce questo evento (noi immaginiamo di rispondere all’evento click su un pulsante).
Private Sub InviaMail_Click()
Dim bStarted As Boolean
Dim oOutlookApp As Outlook.Application
Dim oItem As Outlook.MailItem
On Error Resume Next
Set oOutlookApp = GetObject(, "Outlook.Application")
If Err 0 Then
Set oOutlookApp = CreateObject("Outlook.Application")
bStarted = True
End If
'Crea un nuovo oggetto email
Set oItem = oOutlookApp.CreateItem(olMailItem)
With oItem
'Imposta il destinatario
.To = "nome@server.it"
'Imposta il destinatario in copia
'.CC = "nome@server.it"
'Definisce l'oggetto della email
.Subject = "E-mail da VBA"
'Definisce il contenuto della email
.Body = "Ciao da VBA"
' Definisce l'accont da usare per l'invio
.SendUsingAccount = oOutlookApp.Session.Accounts.Item(2)
'invia effettivamente l'email
.Send
End With
If bStarted Then
'Chiude Outlook se è stato aperto via codice
oOutlookApp.Quit
End If
'Pulizia
Set oItem = Nothing
Set oOutlookApp = Nothing
End Sub
Si noti che che l’account da usare va indicato con un numero. A questo proposito bisogna sapere che gli account sono numerati nell’ordine in cui compaiono nella finestra degli account di Outlook. La numerazione parte da 1 che è l’account predefinito.

ricevo un errore nella riga di codice 7
quote:
If Err 0 Then
di omar - 18 Marzo 2010 - 17:04
Effettivamente mi è “saltato” un diverso .
La riga corretta è
If Err 0 Then
di Alessandra Salvaggio - 18 Marzo 2010 - 19:56
Grazie Alessandra!
Funziona!
Posso aggiungere lo stesso file dove inserisco la ruotine in allegato ?
di omar - 29 Marzo 2010 - 22:48
Scusa Omar, ma non ho capito la domanda.
di Alessandra Salvaggio - 30 Marzo 2010 - 09:20
Mi sono spiegato male.
Posso personalizzare l’email in modo tale che in allegato inserisca il file excel con la tua routine ?
Grazie ancora
di Omar - 30 Marzo 2010 - 09:45
Per inserire un allegato via VBA prova ad usare questa sintassi
oItem.Attachments.Add “percorsoNomefile.xls”
di Alessandra Salvaggio - 30 Marzo 2010 - 09:49