VBA Invia e-mail da Excel tramite Outlook

Questo tutorial ti mostrerà come inviare e-mail da Excel tramite Outlook utilizzando VBA.

Invio della cartella di lavoro attiva

1234567891011121314151617181920 Funzione SendActiveWorkbook(strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As BooleanIn caso di errore Riprendi AvantiDim appOutlook As ObjectDim mItem As Object'crea una nuova istanza di OutlookImposta appOutlook = CreateObject("Outlook.Application")Imposta mItem = appOutlook .CreateItem(0)Con mItem.To = strTo.CC = "".Subject = strSubject.Body = strBody.Allegati.Aggiungi cartella di lavoro attiva.Nome completo'usa Invia per inviare immediatamente o visualizza per mostrare sullo schermo.Visualizza 'o .InviaTermina con'pulire oggettiImposta mItem = NienteImposta appOutlook = NienteFine funzione

La funzione sopra può essere chiamata utilizzando la procedura seguente

123456789101112131415 Sub SendMail()Dim strTo As StringDim strSubject As StringDim strBody As String'popola variabilistrTo = "[email protected]"strSubject = "Trova il file finanziario allegato"strBody = "del testo va qui per il corpo dell'e-mail"'chiama la funzione per inviare l'e-mailSe SendActiveWorkbook(strTo, strSubject, , strBody) = true alloraMsgbox "Creazione email riuscita"AltroMsgbox "Creazione email fallita!"Finisci seFine sottotitolo

Utilizzo dell'associazione anticipata per fare riferimento alla libreria di oggetti di Outlook

Il codice sopra usa l'associazione tardiva per fare riferimento all'oggetto Outlook. È possibile aggiungere un riferimento a Excel e dichiarare l'applicazione Outlook e l'elemento di posta Outlook utilizzando l'associazione anticipata, se si preferisce. L'associazione anticipata rende il codice più veloce, ma ti limita in quanto l'utente dovrebbe avere la stessa versione di Microsoft Office sul proprio PC.

Fare clic sul menu Strumenti e Riferimenti per visualizzare la finestra di dialogo di riferimento.

Aggiungere un riferimento alla libreria oggetti di Microsoft Outlook per la versione di Office in uso.

È quindi possibile modificare il codice per utilizzare direttamente questi riferimenti.

Un grande vantaggio della rilegatura anticipata sono gli elenchi a discesa che mostrano gli oggetti disponibili per l'uso!

Invio di un foglio singolo dalla cartella di lavoro attiva

Per inviare un singolo foglio, devi prima creare una nuova cartella di lavoro dalla cartella di lavoro esistente con solo quel foglio, quindi inviare quel foglio.

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849 Funzione SendActiveWorksheet (strTo As String, strSubject As String, Optional strCC As String, Optional strBody As String) As BooleanIn caso di errore GoTo eh'dichiarare variabili per contenere gli oggetti richiestiDim wbDestination come cartella di lavoroDim strDestName As StringDim wbSource come cartella di lavoroDim wsSource As WorksheetDim OutApp come oggettoDim OutMail come oggettoDim strTempName As StringDim strTempPath As String'prima crea la cartella di lavoro di destinazioneImposta wbDestination = Workbooks.AddstrDestName = wbDestination.Name'imposta la cartella di lavoro e il foglio di origineImposta wbSource = ActiveWorkbookImposta wsSource = wbSource.ActiveSheet'copia il foglio attivo nella nuova cartella di lavorowsSource.Copy After:=Workbooks(strDestName).Sheets(1)'salva con un nome temporaneostrTempPath = Ambiente$("temp") & "\"strTempName = "Lista ottenuta da " & wbSource.Name & ".xlsx"Con wbDestination.Salva con nome strTempPath & strTempName'ora invia per e-mail la cartella di lavoro di destinazioneImposta OutApp = CreateObject("Outlook.Application")Imposta OutMail = OutApp.CreateItem(0)Con OutMail.To = strTo.Subject = strSubject.Body = strBody.Allegati.Aggiungi wbDestination.FullName'usa Invia per inviare immediatamente o visualizza per mostrare sullo schermo.Display 'o .DisplayTermina con.Chiudi FalsoTermina con'elimina la cartella di lavoro temporanea che hai allegato alla tua postaUccidi strTempPath & strTempName'ripulire gli oggetti per liberare la memoriaImposta wbDestination = NienteImposta wbSource = NienteImposta wsSource = NienteImposta OutMail = NienteImposta OutApp = NienteEsci dalla funzioneehi:MsgBox Err.DescrizioneFine funzione

e per eseguire questa funzione, possiamo creare la seguente procedura

12345678910111213 Sub SendSheetMail()Dim strTo As StringDim strSubject As StringDim strBody As StringstrTo = "[email protected]"strSubject = "Trova il file finanziario allegato"strBody = "del testo va qui per il corpo dell'e-mail"Se SendActiveWorksheet(strTo, strSubject, , strBody) = True AlloraMsgBox "Creazione email riuscita"AltroMsgBox "Creazione email fallita!"Finisci seFine sottotitolo
wave wave wave wave wave