Hi ,
In rete ho trovato questi 2 codici che adattati al mio scenario funzionano benissimo.
Desidererei però che all'inserimento di nuovi destinatari che possono essere (uno o più) in colonna A la mail venga inviata solo a quest'ultimi e non di nuovo a tutti compreso questi nominativi nuovi ed aggiunti in seguito al primo invio.
Posto i 2 codici e l'immagine del foglio di Excel creato per inviare le e.mails.
Sub Inviamail(mail As String, file As String, ccmail As String, i As Integer)
Dim OutApp As Object
Dim OutMail As Object
Dim bodymail As String
Dim C As Integer
Set OutApp = CreateObject("Outlook.Application")
OutApp.Session.Logon
Set OutMail = OutApp.CreateItem(0)
On Error Resume Next
With OutMail
.From = "xxxxxx@xxxxxx"
.TO = mail
.CC = Trim(ccmail)
.BCC = Cells(11, 6)
.Subject = Cells(12, 6)
.BodyFormat = olFormatHTML
bodymail = "<html><head></head><body>"
For C = 1 To 4
bodymail = bodymail + Cells(C + 12, 6) + "<br />"
Next C
bodymail = bodymail + "<br /><br /><br />" + "<b>" + Cells(17, 6) + "</b></html></body>"
.HTMLbody = bodymail
.Attachments.Add file
.Send
End With
On Error GoTo errore
Cells(i, 4) = "INVIATA"
Set OutMail = Nothing
Set OutApp = Nothing
Exit Sub
errore:
Cells(i, 3) = "ERRORE !"
End Sub
Sub listamail()
Dim i As Integer
Dim mail As String
Dim ccmail As String
Dim file As String
Dim percorso As String
Range("D:D").ClearContents
percorso = Cells(1, 6)
If Right$(percorso, 1) <> "" Then percorso = percorso & ""
i = 2
While Trim(Cells(i, 1)) <> ""
mail = Cells(i, 1)
file = percorso + Cells(i, 2)
ccmail = Cells(i, 3)
Call Inviamail(mail, file, ccmail, i)
i = i + 1
Wend
End Sub

In colonna A sono indicati i destinatari, vorrei poter inserire altri al di sotto dei 3 già inseriti e per i quali l'invio è andato a buon fine ( come si evince dalla parola INVIATA in colonna D) ed inviare solo a questi l'e.mail.
P.S. magari tramite msgbox che mi avvisi se inviare a tutti oppure ai nuovi aggiunti dopo aver effettuato il primo invio delle e.mail.
Sostituisci:
Sub listamail()
Dim i As Integer
Dim mail As String
Dim ccmail As String
Dim file As String
Dim percorso As String
Range("D:D").ClearContents
percorso = Cells(1, 6)
If Right$(percorso, 1) <> "" Then percorso = percorso & ""
i = 2
While Trim(Cells(i, 1)) <> ""
mail = Cells(i, 1)
file = percorso + Cells(i, 2)
ccmail = Cells(i, 3)
Call Inviamail(mail, file, ccmail, i)
i = i + 1
Wend
End Sub
con:
'--------->>
Public Sub ListaMail()
Dim i As Long
Dim mail As String
Dim ccmail As String
Dim file As String
Dim percorso As String
Dim Res As VbMsgBoxResult
Res = MsgBox( _
Prompt:="Invia un'email solo ai nuovi destinari?", _
Buttons:=vbYesNoCancel, _
Title:="SELEZIONA DESTINARI")
Select Case Res
Case vbNo
ActiveSheet.Range("D:D").ClearContents
Case vbCancel
Call MsgBox( _
Prompt:="Hai cancellato", _
Buttons:=vbInformation, _
Title:="CODICE TERMINATO")
Exit Sub
Case Else
'\ Fa niente
End Select
percorso = Cells(1, 6)
If Right$(percorso, 1) <> "" Then percorso = percorso & ""
i = 2
While Trim(Cells(i, 1)) <> ""
If IsEmpty(Cells(i, 4)) Then
mail = Cells(i, 1)
file = percorso + Cells(i, 2)
ccmail = Cells(i, 3)
Call Inviamail(mail, file, ccmail, i)
Cells(i, 4).Value = "INVIATA"
End If
i = i + 1
Wend
End Sub
'<<=========
Nota che non ho considerato nessun altro aspetto del tuo codice.
PS:
Ho aggiunto il codice evidenziato in grassetto che era mancante.
===
Regards,
Norman
