Condividi:        

Invio email mediante vba in excel

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

Invio email mediante vba in excel

Postdi Saris » 11/04/16 20:20

Buona sera.
Spero di non sbagliare aprendo una nuova discussione per argomenti trattati molto tempo nel forum, nel caso non me ne vogliano i moderatori.
Seguendo i vari consigli di questo forum sono riuscito ad adattare il codice vba alle mie esigenze. Credo di fare cosa gradita postandolo di seguito:

Codice: Seleziona tutto
Sub InvioMail()
Dim OLook As Object 'Outlook.Application
Dim MItem As Object 'Outlook.MailItem
Dim Inter As String, CScad As Integer
Dim R As Integer, C As Integer
Dim MAddr As String, MSubj As String
Dim Sog As String
Dim TurN As String, ZO As String, nA As String, ST As String


If (Selection.Rows.Count + Selection.Columns.Count) > 2 Then Exit Sub
    With Sheets("Dati")
          If .Cells(27, 5).Text = "" Then Exit Sub
            MAddr = .Cells(27, 5).Text
            Sog = .Cells(29, 5).Text
    End With
   
    With ActiveSheet
         R = ActiveCell.Row
         MSubj = "Orario di " & Sog & " " & .Cells(R, 6).Text  '<<<< Subject della mail

         Set OLook = CreateObject("Outlook.Application")
         Set MItem = OLook.createitem(0)
         MItem.to = MAddr
         MItem.Subject = MSubj
'------------
        If .Cells(R, 12).Text <> "" And .Cells(R, 9).Text <> "" Then TurN = "scrivi questo"
        If .Cells(R, 14).Text <> "" And .Cells(R, 9).Text <> "" Then ZO = "scrivi 2"
        If .Cells(R, 16).Text <> "" And .Cells(R, 9).Text <> "" Then nA = "scirivi 3"
        If .Cells(R, 9).Text = "" Then MItem.Body = "Il " & .Cells(R, 6).Text & " scrivi 4" _
            & vbCrLf & .Cells(R, 8).Text Else
        If .Cells(R, 9).Text <> "" And .Cells(R, 11).Text = "" Then SecTurn = "" Else _
             ST = "Inizio: " & .Cells(R, 10).Text & "        Fine: " & .Cells(R, 11).Text & vbCrLf & vbCrLf
        MItem.Body = "testo completo della mail " & .Cells(R, 6).Text & ":" & vbCrLf_
      & "Inizio: " & .Cells(R, 8).Text & "        Fine: " & .Cells(R, 9).Text _
            & vbCrLf & vbCrLf & ST & TurN & vbCrLf & ZO & vbCrLf & nA
   
           MItem.send
            Application.Wait (Now + TimeValue("0:00:05"))
            Set OLook = Nothing
            Set MItem = Nothing

    End With
End Sub



In pratica cliccando su un tastino nel foglio invia una mail all'indirizzo di posta elettronica specificato in una cella del foglio "DATI", recuperando i dati da inserire nella mail, dalla riga cui viene selezionata una cella.

La macro funziona egregiamente su alcuni pc (win 10 e office 2013) ma non su altri (win 7 e office 2010). Su questi ultimi si deve necessariamente avviare prima outlook per far si che tutto funzioni correttamente.
Sapete aiutarmi?
Saris
Utente Junior
 
Post: 16
Iscritto il: 29/02/16 15:49

Sponsor
 

Re: Invio email mediante vba in excel

Postdi Anthony47 » 11/04/16 23:47

Dovresti pero' indicare cosa succede quando "non funziona": ti da' un errore? rimane bloccato? non trovi traccia della mail spedita ne' la stessa arriva a destinazione? Altro?

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio email mediante vba in excel

Postdi Saris » 12/04/16 10:32

Effettivamente!

L'errore è sul VBA: Errore di run-time '287': Errore definito dall'applicazione o dell'oggetto.
Inoltre evidenzia in giallo, nel codice VBA, MItem.send.
Grazie per l'interessamento.
Saris
Utente Junior
 
Post: 16
Iscritto il: 29/02/16 15:49

Re: Invio email mediante vba in excel

Postdi Anthony47 » 12/04/16 11:49

Mah... prova a inserire subito prima della riga "MItem.send":
Codice: Seleziona tutto
MItem.Display
Application.Wait (Now + TimeValue("0:00:01"))
MItem.send         'Esistente

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio email mediante vba in excel

Postdi Saris » 12/04/16 12:30

Adesso non da più errore ma la mail non parte e la parcheggia in posta in uscita.
Ho provato anche ad aumentare il tempo di attesa dopo Mite.send ma non parte la mail.

MItem.Display
Application.Wait (Now + TimeValue("0:00:03"))

MItem.send
Application.Wait (Now + TimeValue("0:00:20"))

Ho notato che l'account di posta viene impostato come exchange e non con pop (purtroppo non conosco le differenze tra le due scelte e se questo può contribuire ad una soluzione)
Saris
Utente Junior
 
Post: 16
Iscritto il: 29/02/16 15:49

Re: Invio email mediante vba in excel

Postdi Anthony47 » 13/04/16 00:29

Secondo me sono le tue impostazioni di Outlook che non consentono l'invio immediato delle email, e questo dovrebbe succedere anche con le mail che compili a mano.
Controlla in Menu /File /Opzioni /Avanzate; nell'area Invio e ricezione metti la spunta a "Invia immediatamente alla connessione" (come detto, vale anche per le mail compilate a mano).

La wait dopo la Send e' sufficiente sia di 2-3 sec.

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio email mediante vba in excel

Postdi Saris » 13/04/16 14:34

Purtroppo era già impostato come da te indicato.

Almeno così non dà errore!!!!
Grazie :-)
Saris
Utente Junior
 
Post: 16
Iscritto il: 29/02/16 15:49

Re: Invio email mediante vba in excel

Postdi Anthony47 » 13/04/16 22:40

Ma quando scrivi un messaggio "a mano" quello parte subito? Mentre quelli generati con la macro rimangono nel folder "In Uscita" e non partono finche' non fai Invia/Ricevi?
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio email mediante vba in excel

Postdi Saris » 14/04/16 12:37

Quando scrivo un messaggio viene messo nella cartella posta in uscita e parte subito dopo, nel giro di un paio di secondi.
Quando il messaggio viene compilato in automatico dalla macro accade che:
1- se outlook è aperto, il messaggio transita in posta in uscita e poi viene inviato automaticamente (come nel caso manuale)
2- se outlook non è aperto il messaggio non parte e quando vado ad avviare outlook lo trovo in posta in uscita; parte dopo circa 40 sec dall'apertura di outlook senza che io faccia nulla.
Saris
Utente Junior
 
Post: 16
Iscritto il: 29/02/16 15:49

Re: Invio email mediante vba in excel

Postdi Anthony47 » 14/04/16 22:05

Non ho idea di cosa possa essere; nei miei test con OL2013 e OL2003 funziona regolarmente.
Non conosco le differenze rispetto a un utente Exchange, ma ho letto che qualcuno ha rimosso l'impostazione "Cached Exchange Mode" (da Pannello di controllo / "Mail" / "Data Files" /"E-mail Accounts" /doppioclick su "Microsoft Exchange Server" /Rimuovere la spunta su "Usa Cached Exchange Mode").

Sorry
Avatar utente
Anthony47
Moderatore
 
Post: 19220
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio email mediante vba in excel

Postdi ricky53 » 15/04/16 15:11

Ciao,
prima leggi quanto ti ha scritto Anthony.


Fornisco il mio contributo alle prove.

Io ho provato con Office 2010 e 2016.
Con entrambi le versioni avendo chiuso OutLook lancio la macro, quando lo avvio e vado a vedere la posta inviata trovo che le e-mail, generate con la macro, sono state inviate.
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-16-19
Avatar utente
ricky53
Utente Senior
 
Post: 4565
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Invio email mediante vba in excel

Postdi Saris » 17/04/16 15:20

Vi ringrazio per l'aiuto. Non ho capito tanto bene le indicazioni di Antony, nel senso che non ho trovato le impostazioni suggerite. Quanto fatto, grazie a questo forum, ha superato le mie aspettative.... se poi si reperiscono altre notizie ben vengano.
GRAZIE!!!
Saris
Utente Junior
 
Post: 16
Iscritto il: 29/02/16 15:49


Torna a Applicazioni Office Windows


Topic correlati a "Invio email mediante vba in excel":

Password Imap (email)
Autore: lukarello7
Forum: Discussioni
Risposte: 8

Chi c’è in linea

Visitano il forum: Nessuno e 24 ospiti