Premettiamo1 che per l' invio automatico delle email bisogna usare un applicativo di posta che supporti l' automazione Vba, ad esempio Outlook (la versione inclusa in Office, ma anche aquistabile separatamente).
Premettiamo2 che secondo me excel e il vba hanno il compito di aiutare l' utente, non di sostituirsi a loro; quindi un file che invia di propria iniziativa delle mail io non lo vorrei suggerire.
Cio' detto, se disponi di Outlook il mio suggerimento e' di creare in un foglio un elenco contenente i dati cruciali dell' evento da gestire
-Nominativo
-Indirizzo email
-Oggetto email
-Campo1 email (es targa)
-Campo2 email (es data)
Vedi esempio:
A questo punto in colonna H ti crei l' oggetto della mail (riga1) e il testo del messaggio che vuoi inviare a ognuno di questi destinatari, con formule standard intercalate dai dati che hai elencato nella tabella precedente.
Ad esempio, dall' elenco precedente:
Questo risultato e' ottenuto inserendo in G1 il numero di riga da cui attingere i dati personalizzati e poi usando queste formule arbitrarie ad uso dimostrazione:
Userai nel tuo foglio le formule in grado di generare il messaggio che ti interessa, partendo dal presupposto che il numero riga da cui prelevare i dati specializzati e' presente in cella G1.
Puoi usare max 100 righe per generare il testo personalizzato; la riga1 sara' il "Subject" della mail, da riga2 in avanti sara' il "Corpo" della mail. Le righe vuote rimangono vuote anche nella mail
Ti anticipo che la macro di invio (vedi oltre) compilera' la cella G1, in sequenza per ogni destinatario.
Poi potrai usare e personalizzare una delle tante macro per invio mail tramite Outlook; io sono partito da questa versione
viewtopic.php?f=26&t=83835&start=20#p479791 specializzandola per la struttura dati che ti ho descritto, ottenendo questa versione che invia le singole email:
- Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
Const LF = vbCrLf
' (a)
Set OutApp = CreateObject("Outlook.Application")
''compilazione del testo di accompagnamento
For I = 2 To Range("H100").End(xlUp).Row
BDT = BDT & Cells(I, "H").Value & LF
Next I
'' (b)
Nominat = Cells(Range("G1").Value, "A").Value
'OutFile = "C:\ESITI\" & Nominat & "_ScrSh.jpg"
EmailAddr = Cells(Range("G1").Value, "B").Value
Subj = Range("H1").Value
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = "pippo@emailadd.com" '<<< Destinatario fisso in c.c.
.BCC = ""
.Subject = Subj
'.Attachments.Add OutFile '***
.Body = BDT
.Display 'or use .send
'.send
End With
' (c)
Set OutMail = Nothing
'
' (d)
Set OutApp = Nothing
Application.Wait (Now + TimeValue("0:00:02"))
Application.SendKeys "%a"
Application.Wait (Now + TimeValue("0:00:04"))
'
End Sub
La riga marcata <<< e' da specializzare.
Per inviare le mail a tutti gli utenti elencati nel foglio attivo che rispecchino la struttura descritta prima inserirai questa seconda macro:
- Codice: Seleziona tutto
Sub InviaAll()
For I = 2 To Cells(Rows.Count, "A").End(xlUp).Row
Range("G1") = I
Call Invioemail
Next I
End Sub
La macro da mandare in esecuzione e' questa seconda, sara' lei che richiama Invioemail.
Nota che la macro lavora sul foglio attivo; quindi potresti creare diversi fogli che abbiano strutture e formule diverse per gestire i tuoi diversi bisogni, e processarli poi con la stessa macro; il vincolo al momento e' la cella G1 usata dalla InviaAll per specificare quale riga e' in gestione e la colonna H dove Invioemail accede per ottenere Subject e Corpo della mail, ma l' adattamento e' abbastanza semplice.
La Sub Invioemail contiene la riga '.Attachments.Add OutFile '***; eliminando l'apostrofo iniziale e compilando OutFile si puo' indicare quale allegato va inviato; esempio:
- Codice: Seleziona tutto
'.Attachments.Add "C:\Directory\NomeFile.pdf" '***
Se non disponi di Outlook allora si puo' ancora fare qualcosa, ma con maggiore intervento dell' utente e (mi pare) con poca possibilita' di modificare il testo.
Vedi se quanto proposto ha una applicabilita' alla tua situazione
Ciao