Tramite VBA è possibile inviare email in modo automatizzato.
Di seguito trovare il codice per standard per inviare una mail con l’indicazione
del destinatario, desitinatario in CC ed in BCC, oggetto, testo della mail, allegati.
Si può inseire ad esempio in un progetto per poter inviare una mail standard ad un referente.
Nel file allegato troverete inoltre altre tre macro, commentate:
– “InviaMail_Parametrica()”, vi permette di personalizzare l’inivio appoggiandovi ad una tabella
dove potete inserire i dati a vostro piacimneto senza metterli nel codice
– “InviaMail_con_Condizione(DEBITORE as Integer)” è uno sviluppo di quella sopra e consente di lanciare l’invio di mail in base ad una condizione. Nell’esempio ho inserito un formula if nella colonna “CHECK DEBITO”
che restiuisce “INVIARE MAIL” se l’importo della colonna “DEBITO” è maggiore di zero.
In queesto caso, la macro cicla su tutta la tabella ed invia mail solo se il debito è >0
Questa macro viene lanciata dalla macro “LanciaMailconCondizione()”
-“InviaMail_con_Condizione_E_Dialog(DEBITORE as Integer)” è uno sviluppo di quella sopra e consente di selezionare il file da alligare tramite una maschera
NOTA:
Prima di lanciare le macro creare in C: i due file di test “test1.txt” e “test2txt”
SUGGERIMENTO:
è preferibile utilizzare l’istruzione “.Display” al posto di “.Send” in quanto
la prima permette di poter vedere ed eventualmente modificare la mail prima dell’invio.
Public Sub InviaMail_Predefinita() Dim destinatario As String Set OutApp = CreateObject("Outlook.Application") Set OutMail = OutApp.CreateItem(0) With OutMail .to = PAPERINO@gmail.com 'inserire la mail del destinatario in TO .CC = inCC_PAPERINO@gmail.com 'inserire la mail del destinatario in CC .BCC = inBCC_PAPERINO@gmail.com 'inserire la mail del destinatario in BCC .Subject = "PROVA" .Body = "Ciao PAPERINO," & Chr(10) & _ Chr(10) & "questa è una prova di invio" & _ Chr(10) & _ Chr(10) &"office-guru.com" .Attachments.Add ("C:\test1.txt") 'inserire il percorso ed il nome del file da allegare .Attachments.Add ("C:\test2.txt") 'inserire il percorso ed il nome del file da allegare '.Send 'per inviare subito la mail .Display 'per aprire e controllare la mail prima di inviarla manualmente End With Set OutMail = Nothing Set OutApp = Nothing End Sub
Un lettore ci chiede:
“Si può inserire nel codice un ‘IF’ per fare si che l’email venga inviata automaticamente? in pratica avrei bisogno di sapere che se in una textbox compare un numero deve partire in automatico l’email senza premere il tasto INVIO.”
Risposta:
Per ottenere il risultato voluto bisonga sostituire nella macro al codice:
'.Send 'per inviare subito la mail .Display 'per aprire e controllare la mail prima di inviarla manualmente
il codice:
If Me.NomeTestBoxDaModificare= MioValoreDaModificare then .Send Else .Display End if
Nel caso si volesse invece inviare una mail utilizzando i dati di riga attiva, selezionata,
si può modificare la macro “InviaMail_Parametrica” inserendo al posto del riferimento fisso alla riga 2, il numero della riga selezionata: Selection.Row
A voi il file con la modifica richiesta da un nostro lettore:
Riccardo Vincenti
Riccardo Vincenti
Ultimi post di Riccardo Vincenti (vedi tutti)
- 073. Duplicare righe excel modificando il contenuto - 6 Ottobre 2017
- 072. Estrazione numeri casuali - 6 Ottobre 2017
- 071. Estrazione casuale valori da un elenco - 5 Ottobre 2017
- 070. Contare dati univoci senza Pivot - 21 Settembre 2017
- 069. Aggiungere intervalli ad una data: Date Add in Excel - 21 Settembre 2017
perfetto! Funziona a meraviglia!
Grazie!
Salve Riccardo,
oltre a ciò, sa dirmi se il testo della mail (corpo) può contenere parti in grassetto, altre sottolineate, altre ancora evidenziate?
Saluti
Si, deve configurare la mail come HTML e inserire i tag HTML quindi per grassetto etc. E’ un po’ complicato e laborioso ma si puo’ fare.
Salve
ho adattato il codice vba per inviare mail ad un mio foglio di lavoro. Ho aggiunto un po di robe. Esempio: dove hai scritto di salvare su C: un file di testo e rinominarlo test1 il mio lo fa in automatico salvando il file excel in pdf e lo rinomina rapportino. Dopo di che ho inserito un pulsante invia mail, inoltre ho aggiunto che quando premo invia mail mi pulisce le celle dove inserisco le informazioni in modo da iniziare sempre da capo. Il tutto funziona perfettamente solo che volevo aggiungere un opzione a cui non sono riuscito.Volevo sapere cosa cambiare nel codice nella parte dell’indirizzo mail del destinatario per fare in modo che da un foglio 1 (dove inserisco gli indirizzi in cella A:1) in un foglio 2 dove ho il corpo da inviare, aggiungo il tasto invia mail.
Mi spiego meglio: Foglio 1 – cella A1 = indirizzo a cui inviare (modificabile)
Foglio 1 – cella A2 = indirizzo CC (modificabile)
Foglio 2 corpo che viene salvato in pdf ed inviato.
Spero di essere stato chiaro.
Saluti
Isidoro
Salve,
Grazie mille per il suo commento. se vorrà inviare il codice modificato saremo lieti di includerlo in un post di questo sito a suo nome, se vorrà invece contribuire in modo più strutturato (scrivendo ad esempio lei qualche articolo, la invito a leggere la pagina
http://www.office-guru.com/wordpress/richiedi-supporto/collabora/
Grazie ancora!
[…] Torniamo a parlare dell’invio di mail attraverso VBA che ho trattato nell’articolo: “http://www.office-guru.com/wordpress/2013/02/invio-mail-tramite-vba/ […]
Buongiorno, sto provando a usare il codice dell’articolo e va benissimo tranne che avrei bisogno di inviare nel corpo messaggio o oggetto i dati della riga ATTIVA in quello momento, filtrando della collona A:K. Spero che qualcuno mi posso aiutare, grazie mille.
Salve,
Grazie mille per l’aiuto! Funziona alla perfezione!!
Per concludere con i miei dubbi, c’e modo di controllare l’utente del login windows, in modo di dire: se utente XXX (segue la regola dell’invio mail)
se non msgbox “Non sei autorizato a inviare email”.
Grazie tante ancora.
Puoi per esempio usare questa macro pubblicata da Riccardo per rilevare la username e poi prendere le azioni più adatte:
http://www.office-guru.com/wordpress/2014/07/058-rileva-username-del-pc/
Salve
Qualcuno mi sa spiegare perchè in excel mi funziona benissimo e in Access mi dice che non riesce a creare l’oggetto
Grazie
per poter utilizzare tramite Access una macro create per Excel,
è necessario aggiungere in Access la libreria di Excel.
Per farlo bisogna aprire l’editor Vba di Access, selezionare Tools, References
e mettere segno di spunta sulla libreria “Microsoft Excel 14.0 Object Library”
Gentile Riccardo, il mio problema è il seguente:
(i) ho un file EXCEL 2011 MAC in cui, in varie colonne, ho i dati di ogni socio dell’associazione e le date di scadenza per quel socio di vari parametri (assicurazione, brevetto, visita medica). Ad Esempio:
NOME – COGNOME – EMAIL – SCADENZA ASS.NE – SCADENZA BREVETTO – SCADENZA VISITA MEDICA
(ii) vorrei cercare di adattare la macro affinchè, alcuni giorni prima della singola scadenza di ogni singolo parametro, invii automaticamente una mail di remind a quel socio con un determinato testo breve.
(iii) il tutto in cc a me per controllare.
Il client di posta che uso è MAIL per MAc. Sistema operativo OSX YOSEMITE 10.10.1
Può aiutarmi? Grazie
Ciao, potresti modificare la macro andando a prendere gli indirizzi da inserire in
to;cc;bcc
da un range?
Questo perché la i destinatari sono sempre diversi e dipendono dal contenuto di un folgio di lavoro della cartella da inviare.
Grazie
Salve,
è sufficiente che nel foglio di controllo si impostano delle formule per “comporre” gli indirizzi email, una volta fatto e impostate le “x” dovrebbe funzionare tutto in automatico
Salve, ho un codice VBA in Access che tramite un pulsante mi crea in automatico un file excel nella cartella C:\2016 con il nome [stDocName = “PB16_” & ID_Run & ” – ” & DotDate & ” – ” & ID_Storico & ” – ” & Tipo_Blocco] ad ogni azione che creo.
Nello stesso file ho un’ulteriore pulsante per l’invio della mail.
Vorrei far in modo che, quando creo un’azione ed il rispettivo file excel, premendo il pulsante per l’invio mail mi si alleghi in automatico il file excel creato per quell’azione.
Ho provato alcune sintassi ma non riesco a farle funzionare.
Spero che qualcuno mi possa aiutare.
Fabio
Buongiorno a tutti,
se volessi inserire un riferimento diverso per ogni stringa, ovvero inviare ad ogni destinatario un file differente cosa posso compilare in sostituzione a :
‘.Attachments.Add (“C:\test.txt”)
Salve
deve avere una tabella in un foglio excel con i nomi degli allegati e fare un ciclo per passarli tutti..
oppure usare e modificare il file che trova alla pagina
http://www.office-guru.com/wordpress/2013/10/invio-mail-vba-spedire-automaticamente-fogli-excel-tramite-outlook/
Cordiali saluti
Salve, non ho dimestichezza con vba, ma ho lo stesso problema sollevato dal Sig. Antonio, ovvero inviare ad ogni destinatario un file differente. Come devo modificare il codice? Mi potrebbe seguire passo passo. Ringraziando anticipatamente porgo cordiali saluti.
Salve.
Non credo sia necessario modificare il codice. Basta usare questa evoluzione del tool:
http://www.office-guru.com/wordpress/2013/10/invio-mail-vba-spedire-automaticamente-fogli-excel-tramite-outlook/
Si preparano fogli differenti per destinatari differenti dopo di che si utilizza il foglio di controllo per inserire le email dei destnatari e le “x” per indicare quali fogli devono essere recapitati a ogni destinatario. In questo modo con un file excel solo è possibile inviare più report different a persone differenti e “riutilizzare” lo stesso report per più persone creando per ognuno un package personalizzato.
Ciao a tutti,
formulo questo quesito su questo post he ha come argomento invio e-mail da vba.
Il processo è il seguente: arriva un’e-mail in Outlook e la macro vba consente di fare “inoltra a tutti”.
Poi sto cercando di selezionare un testo da inserire nell’e-mail ma questo dovrei essere in grado infatti sto facendo alcune prove con il codice “crea e invia e-mail da vba”, questa parte del processo infatti non non credo dovrebbe cambiare se si tratta di crea e invia o rispondi/inoltra.
Ho cercato in una miriade di forum e ho trovato il seguente Sub che vi inoltro. Mi sembra interessante in quanto parte da un folder di appoggio e poi seleziona testo di risposta e l’oggetto del replay in excel.
Ho visto anche le caratteristiche del computer:
Microsoft Office 2010
Microsoft Outlook 2010
Windows 7
System type: 64 bit
Se ho capito bene, il processo che vi riporto fa rispondi e-mail da un folder in Outlook dove sono inserite le e-mail in modo da verificare le e-mail di interesse (con una regola Outlook le potrei spostare) però il processo mi si blocca alla riga in cui setta myFolder:
Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox) ‘qui indico quale sia il folder di partenza
In D4 ho capito che bisogna mettere qualcosa tipo il path Oulook, ci ho provato ma si blocca. Ho inserito la libreria nel progetto macro ma non va comunque.
Se ho capito bene dalla cella D4 del Foglio1 il processo “legge” il percorso dove prendere l’e-mail di Outlook alla quale fare reply. Quindi dopo aver inserito sotto Inbox di Outlook il percorso Pippo\Pluto ho provato come segue scrivendo in D4 in alternativa:
Inbox\Pippo\Pluto
Tutto il percorso outlook rilevato dal file posta:
C:\Appdata\Local\Microsoft\Outlook\miaemail.it.ost\Inbox\Pippo\Pluto
C:\Appdata\Local\Microsoft\Outlook\miaemail.it\Inbox\Pippo\Pluto
Cioè senza il .ost
Però da sempre il messaggio di errore “necessario oggetto”.
Il processo è compreso tra gli asterischi:
Perchè si blocca? Grazie.
Enrico
**********
Sub olReply()
‘Dichiarazione Variabili generiche
Dim Folder_Select As String
Dim Oggetto_Select As String
Dim risposta_Select As String
‘popolo le variabili sopra
Folder_Select = Foglio1.Cells(4, 4).Value
Oggetto_Select = Foglio1.Cells(5, 4).Value
risposta_Select = Foglio1.Cells(6, 4).Value
‘Dichiaro le variabili per la gestione della mail
‘per accettarle ho dovuto aggiungere in strumenti\riferimenti la voce “Microsoft outllok XX.X object library”
Dim objOL As Outlook.Application
Dim objMsg As Outlook.MailItem
Dim oReply As Outlook.MailItem
Dim myFolder As Outlook.Folder
‘setto le variabili per recuperare i dati
Set objOL = CreateObject(“Outlook.Application”)
Set myNameSpace = Outlook.GetNamespace(“MAPI”) ‘ questo non so a cosa serva, lo ho trovato su internet 😀
Set myFolder = myNameSpace.GetDefaultFolder(olFolderInbox) ‘qui indico quale sia il folder di partenza
Set myFolder = myFolder.Folders(Folder_Select) ‘ qui indico in quale folder trovare le mail
‘inizio a rispondere alle e-mail
For Each objMsg In myFolder.Items
If objMsg.UnRead = True Then
If objMsg.Subject = Oggetto_Select Then
Set oReply = objMsg.Reply
oReply.HTMLBody = risposta_Select & objMsg.HTMLBody
oReply.Display
End If
End If
Next
‘Distruggo le variabili
Set objMsg = Nothing
Set objOL = Nothing
Set oReply = Nothing
Set myFolder = Nothing
End Sub
**********
Ciao a tutti, scrivo su questo post magari può un argomento di completamento dell’argomento.
Il processo è il seguente: arriva un’e-mail in Outlook è possibile che una la macro vba excel consenta di fare “inoltra a tutti”? Ho trovato un processo ma non mi funziona. Ho cercato anche in altri forum. Ho fatto diverse prove. Ma non riesco proprio a far fare questa azione a vba excel.
Poi sto cercando di selezionare un testo da inserire nell’e-mail ma questo dovrei essere in grado ;o) infatti sto facendo alcune prove con il codice “crea e invia e-mail da vba”, questa parte del processo infatti non non credo dovrebbe cambiare se si tratta di crea e invia o rispondi/inoltra.
Il testo da inserire nell’e-mail da inoltrare a tutti viene da una cella del Foglio1.
Se puó essere utile le caratteristiche del SW/HW:
Microsoft Office 2010
Microsoft Outlook 2010
Windows 7
System type: 64 bit
Grazie
Scusate…Volevo scrivere Enrico 😉
Salve,
Excel dovrebbe:
leggere le email da Inbox, prendere l’email e “importarla”, leggerne le intestazioni e agire su di essa (modificare, inoltrare).
un esempio di questo tipo di automazione è disponibile qui:
https://stackoverflow.com/questions/23746344/excel-vba-code-to-retrieve-e-mails-from-outlook
non è molto complicato ma bisogna entrare nelle logiche con cui Excel lavora la “inbox” di Outlook.
Saluti
Buongiorno e complimenti per l’ottimo lavoro. Sono riuscito ad adattare il file per poter inviare email differenti a seconda delle condizioni.
Adesso vorrei impostare la possibilità di inviare le email senza accedere ad outlook, direttamente mediante l’smtp di aruba. E’ una cosa possibile?
Grazie.
Lorenzo
Buongiorno.
In realtà per poter inviare una mail bisogna comunicare con un server di posta attraverso il suo protocollo di comunicazione. Tale protocollo si chiama SMTP. Outlook è un programma che è fatto apposta per comunicare attraverso tale protocollo, Excel è fatto apposta per fare fogli di calcolo. Esistono delle estensioni per poter inviare email, facendo le veci di Outlook: qui un esempio di utilizzo:
http://www.rondebruin.nl/win/s1/cdo.htm
Usando macro di access “Invia oggetto” (per inviare una email tramite outlook) funziona ma non permette di avere la mail in questione tra quelle inviate.
Usando questo codice funziona perfettamente. Grazie 1000
Grazie a te!