Indice del forum Excel e VBA
Soluzioni e problemi di Excel
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

[RISOLTO] Invio E-Mail in modo automatico con Excel e VBA

 
Nuovo argomento   Rispondi    Indice del forum -> Problemi con Excel [Domande e Risposte]
Precedente :: Successivo  
Autore Messaggio
Ads






Inviato: Gio Nov 27, 2014 5:53 pm    Oggetto: Ads

Top
ricky53
Moderatore
Moderatore


Registrato: 22/03/07 01:29
Messaggi: 4598
Residenza: Roma (ma provincia)

MessaggioInviato: Mer Feb 24, 2010 1:01 am    Oggetto: [RISOLTO] Invio E-Mail in modo automatico con Excel e VBA Rispondi citando

Ciao a tutti

Devo inviare, settimanalmente, tramite Excel, e-mail a 20-30 destinatari diversi con dei dati in allegato.
Ho un foglio con i vari indirizzi e con i dati da inviare, specifici per ogni destinatario.
Per inviare le varie e-mail DEVO utilizzare Microsoft Office Outlook (regole aziendali)

Utilizzo una macro da cui ho estratto la parte che mi interessa proporre come problema

Codice:
Sub Invia_email()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EmailAddr As String
    Dim Subj As String
    Dim BodyText As String
    Set OutApp = CreateObject("Outlook.Application")
    Set OutMail = OutApp.CreateItem(0)
    With OutMail
        .To = "xxxxx@libero.it"
        .CC = ""
        .BCC = ""
        .Subject = "OGGETTO=Prova di invio e-mail"
        .Body = "Questo è il testo della e-mail"
        .Send
    End With
    Set OutMail = Nothing
    Set OutApp = Nothing
End Sub


Eseguendo la macro ottengo un messaggio di avviso di Microsoft:


Solamente gli utenti registrati possono vedere link su questo forum!
Registrati oppure Autenticati su questo forum.



Il messaggio mi compare per ogni invio di e-mail che faccio:

FASTIDIOSO

Ma le varie e-mail vengono inviate correttamente.

Ho provato, come suggerito in un forum, a togliere
“.send”
e sostituirlo con
SendKeys ("%(s)"), True
Ma in questo modo l’e-mail non viene inviata.

Chi di voi ha avuto il mio stesso problema?
Lo avete risolto?

Grazie.
Ciao da Ricky53


L'ultima modifica di ricky53 il Mer Feb 24, 2010 6:36 pm, modificato 1 volta
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Mer Feb 24, 2010 8:56 am    Oggetto: Rispondi citando

ciao ricky, sono enzo
ci si sente anche in altri forum
purtroppo non posso esserti di aiuto ma visto che la tua isruzione potrebbe venirmi utile anche con questa "anomalia" ti volevo chiedere
dove intervenire per poter inserire anche un allegato
ciao
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Mer Feb 24, 2010 9:01 am    Oggetto: Rispondi citando

un altra richiesta
volendo inserire un ciclo for next
dove gli indirizzi sono inseriti in celle esempio a1,a2 etc
ho provato ad inserire il ciclo
mi spedisce la prima poi si blocca
sai darmi una dritta
ciao
Top
Profilo Invia messaggio privato
DavideV
Presente
Presente


Registrato: 05/02/10 13:29
Messaggi: 42

MessaggioInviato: Mer Feb 24, 2010 9:57 am    Oggetto: Rispondi citando

Il problema non credo sia aggirabile, a meno di non avere una conoscenza approfondita del sistema Windows, delle sue API, e di come chiamarle in VBA. Questo sistema antispam è caratteristico del sistema operativo e non è eliminabile manualmente... io ho risolto parzialmente con l'istruzione

Codice:
eMail.Move myOutBox


così quando apro Outlook (anch'io per restrizioni aziendali) me li trovo già nella posta in uscita.
Top
Profilo Invia messaggio privato
DavideV
Presente
Presente


Registrato: 05/02/10 13:29
Messaggi: 42

MessaggioInviato: Mer Feb 24, 2010 10:39 am    Oggetto: Rispondi citando

@ Enzo:

ti copio il codice del modulo invio email che ho scritto in uno dei miei programmi Excel

Ti spiego brevemente come funziona, così riuscirà più facile capire come funziona:

Le email contengono un testo uguale per tutti e un allegato, diverso a seconda del destinatario. Quando devo inviare questi prospetti apro un form dove, mediante una combobox, seleziono la cartella dove sono salvati i prospetti. In questa cartella ci sono una serie di file .xls in cui i primi 7 caratteri del nomefile sono la matricola aziendale del destinatario, che corrisponde anche all'account del dipendente all'interno del sistema di posta aziendale (se la mia matricola è 1234567, allora la mia email aziendale sarà 1234567atzienda.it).

Una volta individuata la cartella metto in ordine i file (metodo .Execute) e con un ciclo For ... Next esamino ogni file per estrarre la matricola (e quindi ricavare l'indirizzo email), allegarlo al messaggio e preparare l'email per l'invio.

Una volta preparate le email, tutta la cartella viene spostata nella sottocartella "Inviati", che nella ComboBox viene filtrata per non essere visualizzata.

Ho eliminato ogni riferimento all'azienda

Codice:
Sub InviaProspetto()
    Dim ac, indirizzo
    Dim txtMail As String
   
    Set fs = Application.FileSearch
    Set f = CreateObject("Scripting.FileSystemObject")
   
    Sorgente = Cart(formInvio.cmbCartellaSorgente.ListIndex)
   
    With fs
        .LookIn = CStr(ActiveWorkbook.Path + "\Prospetti Liquidati\" + Sorgente)
        .Filename = "*.xls"
        If .Execute(SortBy:=msoSortByFileName, _
        SortOrder:=msoSortOrderAscending) > 0 Then
            For i = 1 To .FoundFiles.Count
            Set j = f.getfile(.FoundFiles(i))
                indirizzo = Left(j.Name, 7) & "@azienda.it"
               
                txtMail = "testo email"

                Dim Out As Outlook.Application
                Dim Mail As Outlook.MailItem
                Set Out = CreateObject("Outlook.Application")
                Set myNameSpace = Out.GetNamespace("MAPI")
                Set myOutBox = myNameSpace.GetDefaultFolder(olFolderOutbox)
                Set eMail = Out.CreateItem(olMailItem)
                eMail.To = indirizzo
                eMail.Subject = "Avviso. Pagamento missione in corso."
                eMail.Body = txtMail
                eMail.Attachments.Add (.FoundFiles(i))
                eMail.Move myOutBox
                Set eMail = Nothing
                Set Out = Nothing
            Next i
            f.movefolder .LookIn, CStr(ActiveWorkbook.Path + _
            "\Prospetti Liquidati\inviati\")
        Else
            MsgBox "La cartella è vuota!", vbExclamation + vbOKOnly, "Errore"
        End If
    End With
   
End Sub
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Mer Feb 24, 2010 10:57 am    Oggetto: Rispondi citando

Davide, inizialmente ti ringrazio
provero' e ti faro ' sapere
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Mer Feb 24, 2010 11:03 am    Oggetto: Rispondi citando

scusa ma non riesco ad adattarla
volevo chiederti se potevi darmi una mano in questo modo
se in un file excel ho dalla cella a1 alla cella a3
gli indirizzi email, un file da allegare ipotizziamo un pdf che si chiama pippo in c:\ e il testo della email "prova invio"
come posso adattare la tua istruzione?
scusa per la rottura
Top
Profilo Invia messaggio privato
DavideV
Presente
Presente


Registrato: 05/02/10 13:29
Messaggi: 42

MessaggioInviato: Mer Feb 24, 2010 12:24 pm    Oggetto: Rispondi citando

Allora... innanzitutto devi notare che quasi tutto il blocco di codice è marcato con "With fs", il che vuol dire che al suo interno tutti i metodi nella forma .metodo si applicano ad un oggetto FileSearch, cosa che a te non serve perché il nomefile da allegare è uguale per tutti e non dinamico come nel mio caso.

Il ciclo For ... Next dovrebbe essere abbastanza semplice:

Codice:
Dim Out As Outlook.Application
Dim Mail As Outlook.MailItem
Dim indirizzo As String
For i = 1 To 3
    Set Out = CreateObject("Outlook.Application")
    Set myNameSpace = Out.GetNamespace("MAPI")
    Set myOutBox = myNameSpace.GetDefaultFolder(olFolderOutbox)
    Set eMail = Out.CreateItem(olMailItem)
    indirizzo = CStr(Trim(Worksheets("FoglioConIndirizzi").Cells(i, 1).Value))
    eMail.To = indirizzo
    eMail.Subject = "Soggetto dell'email"
    eMail.Body = "Testo dell'email"
    eMail.Attachments.Add "c:\pippo.pdf"
    eMail.Move myOutBox
    Set eMail = Nothing
    Set Out = Nothing
Next


...fammi sapere!
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Mer Feb 24, 2010 1:06 pm    Oggetto: Rispondi citando

PERFETTO
GRAZIE DELL'AIUTO
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Mer Feb 24, 2010 1:10 pm    Oggetto: Rispondi citando

come chiedeva ricky, non c'e' proprio il modo di inviarle in automatico?
Top
Profilo Invia messaggio privato
ricky53
Moderatore
Moderatore


Registrato: 22/03/07 01:29
Messaggi: 4598
Residenza: Roma (ma provincia)

MessaggioInviato: Mer Feb 24, 2010 1:47 pm    Oggetto: Rispondi citando

Ciao Enzo,
sarebbe stato meglio aprire una nuova discussione per non mischiare i due arggmenti, anche se in parte collegati!!!


Al momento non ho trovato nessun modo di fare l'invio in automatio ma non dispero.


Enzo ti allego una macro da utilizzare come schema per quanto hai chiesto.

Ho visto che ci sono state altre risposte che non ho avuto tempo di leggere magari ti invio qualcosa di già scritto.

Codice:
Sub Invia_Email()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EmailAddr As String
    Dim Subj As String
    Dim BodyText As String
   
    Foglio1.Select
   
' RR contiene il nuemro di utenti cui inviare le e-mail (1 per utente)
    RR = Range("B" & Rows.Count).End(xlUp).Row
   
' I dati iniziano dalla seconda riga
    For I = 2 To RR
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
       
' La colonna "B" contiene gli indirizzi e-mail dei vari destinatari
            .To = Cells(I, 2)
           
' La colonna "C" contiene l'indirizzo e-mail in "Copia per Conoscenza"
            .CC = Cells(I, 3)
           
' Eventuale e-mail in "Copia per conoscenza nascosta"
            .BCC = ""
           
' La colonna "D" contiene l'oggetto della e-mail
            .Subject = Cells(I, 4)
           
' La colonna "E" contiene l testo della e-mail
            .Body = Cells(I, 5)

' La colonna "F" contiene il percorso ove si trova il file da allegare
' La colonna "G" contiene il nome del file da allegare
            .Attachments.Add (Cells(I, 6) & Cells(I, 7))
            .Send
        End With
        Set OutMail = Nothing
        Set OutApp = Nothing
    Next I
End Sub


Ciao da Ricky53
Top
Profilo Invia messaggio privato
ricky53
Moderatore
Moderatore


Registrato: 22/03/07 01:29
Messaggi: 4598
Residenza: Roma (ma provincia)

MessaggioInviato: Mer Feb 24, 2010 2:01 pm    Oggetto: Rispondi citando

Ciao Davide,
grazie per i tuoi interventi.

Con
Codice:
eMail.Move myOutBox


sposti il messaggio nella posta in uscita e per inviarlo o agisci manualmente oppure ... sempre manualmente

A me occorre agire in "modo silente" per non far fare nessuna azione agli utilizzatori del pacchetto che sto realizzando ...
speriamo bene.

Ciao da Ricky53
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Mer Feb 24, 2010 2:58 pm    Oggetto: Rispondi citando

Grazie ricky della tua risposta e ringrazio ancora anche davide.
Scusa ma non ho aperto un altra discussione in quanto l'argomento era sempre inerentel'invio di email
se dovessi risolvere l'invio automatico fammelo sapere, te ne sarei grato
bye
Top
Profilo Invia messaggio privato
DavideV
Presente
Presente


Registrato: 05/02/10 13:29
Messaggi: 42

MessaggioInviato: Mer Feb 24, 2010 5:28 pm    Oggetto: Rispondi citando

ricky53 ha scritto:
Ciao Davide,
grazie per i tuoi interventi.

Con
Codice:
eMail.Move myOutBox


sposti il messaggio nella posta in uscita e per inviarlo o agisci manualmente oppure ... sempre manualmente

A me occorre agire in "modo silente" per non far fare nessuna azione agli utilizzatori del pacchetto che sto realizzando ...
speriamo bene.

Ciao da Ricky53

quel comando semplicemente mette il messaggio nella casella di posta in uscita, ma l'invio deve sempre essere manuale.

capirai anche tu che essendo una funzionalità antispam messa in piedi dagli sviluppatori del sistema operativo, non è così facile aggirarla a meno, come ti ho già detto, di riuscire a scrivere una funzione che chiami qualche dll nativa del sistema ... ma se fossi in grado di fare una cosa del genere non saresti qui a chiedere aiuto Very Happy
Top
Profilo Invia messaggio privato
ricky53
Moderatore
Moderatore


Registrato: 22/03/07 01:29
Messaggi: 4598
Residenza: Roma (ma provincia)

MessaggioInviato: Mer Feb 24, 2010 6:32 pm    Oggetto: Rispondi citando

RISOLTO!!!!

ecco il codice

Codice:
Sub Invia_Email_Ultima_Buona()
    Dim OutApp As Object
    Dim OutMail As Object
    Dim EmailAddr As String
    Dim Subj As String
    Dim BodyText As String
     
    Foglio1.Select
     
' RR contiene il numero di utenti cui inviare le e-mail (1 per utente)
    RR = Range("B" & Rows.Count).End(xlUp).Row
     
' I dati iniziano dalla seconda riga
    For I = 2 To RR
        Set OutApp = CreateObject("Outlook.Application")
        Set OutMail = OutApp.CreateItem(0)
        With OutMail
       
' La colonna "B" contiene gli indirizzi e-mail dei vari destinatari
               .To = Cells(I, 2)
               
' La colonna "C" contiene l'indirizzo e-mail in "Copia per Conoscenza"
               .CC = Cells(I, 3)
               
' Eventuale e-mail in "Copia per conoscenza nascosta"
               .BCC = ""
               
' La colonna "D" contiene l'oggetto della e-mail
               .Subject = Cells(I, 4)
               
' La colonna "E" contiene l testo della e-mail
               .Body = Cells(I, 5)

' La colonna "F" contiene il percorso ove si trova il file da allegare
' La colonna "G" contiene il nome del file da allegare
               .Attachments.Add (Cells(I, 6) & Cells(I, 7))
               
               .Display
        End With
        Set OutMail = Nothing
        Set OutApp = Nothing
        Application.SendKeys "%a"
    Next I
End Sub


il segreto è in
Codice:
Application.SendKeys "%a"

che corrisponde ad "Alt+a" sulla pagina di invio di Microsoft Outlook

Grazie e ciao da Ricky53
Top
Profilo Invia messaggio privato
DavideV
Presente
Presente


Registrato: 05/02/10 13:29
Messaggi: 42

MessaggioInviato: Mer Feb 24, 2010 11:28 pm    Oggetto: Rispondi citando

ricky53 ha scritto:
il segreto è in
Codice:
Application.SendKeys "%a"

che corrisponde ad "Alt+a" sulla pagina di invio di Microsoft Outlook

Shocked Shocked Shocked

GRANDISSIMO!!! Non vedo l'ora di andare in ufficio a provare questa soluzione!!!!

Per la prima volta in vita mia mi dispiace domani non andare a lavorare Very Happy Very Happy
Top
Profilo Invia messaggio privato
ENZO64
Frequenta
Frequenta


Registrato: 26/02/09 16:03
Messaggi: 82

MessaggioInviato: Gio Feb 25, 2010 9:55 am    Oggetto: Rispondi citando

DIRTI CHE SEI STATO GRANDE E' POCO
L'HO APPENA PROVATA E FUNZIONA ALLA STRAGRANDISSIMA
GRAZIE
Top
Profilo Invia messaggio privato
ricky53
Moderatore
Moderatore


Registrato: 22/03/07 01:29
Messaggi: 4598
Residenza: Roma (ma provincia)

MessaggioInviato: Ven Feb 26, 2010 12:03 am    Oggetto: Rispondi citando

Ciao,
grazie per i "sei grande"

Spero vi sia utile.

Alla prossima.

Ciao da Ricky53
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Problemi con Excel [Domande e Risposte] Tutti i fusi orari sono GMT + 2 ore
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi
c d
e



Powered by phpBB © 2001, 2005 phpBB Group
phpbb.it

Abuse - Segnalazione abuso - Utilizzando questo sito si accettano le norme di TOS & Privacy.
Powered by forumup.it forum gratis free, crea il tuo forum gratis free ora! Created by Hyarbor & Qooqoa
Confirmed

Page generation time: 0.147