Invio email (con Outlook) con dati in foglio di Excel

Anonimo
2017-11-01T18:36:32+00:00

Buona sera a tutti.

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.

Spero di essere stato chiaro e comprensibile.

Ciao Nicola.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-11-02T08:15:09+00:00

Ciao Nicola,

Ho copiato il tuo codice e appena lanciato da CommanButton mi segnala l'errore sottoriportato:

Attendo tue notizie, Ciao Nicola.

O sostituisci:

  Dim i As Long

con 

 Dim i As Integer

o, comè ho fatto io, sostituisci

Sub Inviamail(mail As String, file As String, ccmail As String, i As Integer)

con:

 Sub Inviamail(mail As String, file As String, ccmail As String, i As Long)

Se tu tu guarderesti il codice che pubblico in questo forum, io non utilizzo mai il tipo Integer poichè credo che l'uso del tipo Long sia più efficiente. Però, in realtà, con il tuo codice, e nell'assenza di un numero altissimo di email, non vedresti l'effetto.

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2017-11-01T19:51:20+00:00

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

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

3 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2017-11-02T11:09:08+00:00

    Ciao Nicola,

    ora va benissimo, ho fatto delle prove ed è andato tutto a buon fine.

    Infinitamente grazie .

    Prego!

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2017-11-02T09:20:28+00:00

    Ciao Norman ora va benissimo, ho fatto delle prove ed è andato tutto a buon fine.

    Infinitamente grazie .

    Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2017-11-02T07:42:40+00:00

    Ciao Norman, buongiorno.

    Ho copiato il tuo codice e appena lanciato da CommanButton mi segnala l'errore sottoriportato:

    Attendo tue notizie, Ciao Nicola.

    La risposta è stata utile?

    0 commenti Nessun commento