| Precedente :: Successivo |
| Autore |
Messaggio |
Ads
|
Inviato: Mar Mag 21, 2013 5:01 am Oggetto: Ads |
|
|
|
|
|
| Top |
|
 |
ricky53 Moderatore


Registrato: 22/03/07 01:29 Messaggi: 3821 Residenza: Roma (ma provincia)
|
Inviato: Mer Feb 24, 2010 1:01 am Oggetto: [RISOLTO] Invio E-Mail in modo automatico con Excel e VBA |
|
|
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 |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Mer Feb 24, 2010 8:56 am Oggetto: |
|
|
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 |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Mer Feb 24, 2010 9:01 am Oggetto: |
|
|
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 |
|
 |
DavideV Presente

Registrato: 05/02/10 13:29 Messaggi: 42
|
Inviato: Mer Feb 24, 2010 9:57 am Oggetto: |
|
|
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 |
|
 |
DavideV Presente

Registrato: 05/02/10 13:29 Messaggi: 42
|
Inviato: Mer Feb 24, 2010 10:39 am Oggetto: |
|
|
@ 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 |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Mer Feb 24, 2010 10:57 am Oggetto: |
|
|
Davide, inizialmente ti ringrazio
provero' e ti faro ' sapere |
|
| Top |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Mer Feb 24, 2010 11:03 am Oggetto: |
|
|
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 |
|
 |
DavideV Presente

Registrato: 05/02/10 13:29 Messaggi: 42
|
Inviato: Mer Feb 24, 2010 12:24 pm Oggetto: |
|
|
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 |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Mer Feb 24, 2010 1:06 pm Oggetto: |
|
|
PERFETTO
GRAZIE DELL'AIUTO |
|
| Top |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Mer Feb 24, 2010 1:10 pm Oggetto: |
|
|
come chiedeva ricky, non c'e' proprio il modo di inviarle in automatico? |
|
| Top |
|
 |
ricky53 Moderatore


Registrato: 22/03/07 01:29 Messaggi: 3821 Residenza: Roma (ma provincia)
|
Inviato: Mer Feb 24, 2010 1:47 pm Oggetto: |
|
|
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 |
|
 |
ricky53 Moderatore


Registrato: 22/03/07 01:29 Messaggi: 3821 Residenza: Roma (ma provincia)
|
Inviato: Mer Feb 24, 2010 2:01 pm Oggetto: |
|
|
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 |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Mer Feb 24, 2010 2:58 pm Oggetto: |
|
|
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 |
|
 |
DavideV Presente

Registrato: 05/02/10 13:29 Messaggi: 42
|
Inviato: Mer Feb 24, 2010 5:28 pm Oggetto: |
|
|
| 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 |
|
| Top |
|
 |
ricky53 Moderatore


Registrato: 22/03/07 01:29 Messaggi: 3821 Residenza: Roma (ma provincia)
|
Inviato: Mer Feb 24, 2010 6:32 pm Oggetto: |
|
|
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 |
|
 |
DavideV Presente

Registrato: 05/02/10 13:29 Messaggi: 42
|
Inviato: Mer Feb 24, 2010 11:28 pm Oggetto: |
|
|
| ricky53 ha scritto: | il segreto è in
| Codice: | | Application.SendKeys "%a" |
che corrisponde ad "Alt+a" sulla pagina di invio di Microsoft Outlook
|
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 |
|
| Top |
|
 |
ENZO64 Frequenta

Registrato: 26/02/09 16:03 Messaggi: 82
|
Inviato: Gio Feb 25, 2010 9:55 am Oggetto: |
|
|
DIRTI CHE SEI STATO GRANDE E' POCO
L'HO APPENA PROVATA E FUNZIONA ALLA STRAGRANDISSIMA
GRAZIE |
|
| Top |
|
 |
ricky53 Moderatore


Registrato: 22/03/07 01:29 Messaggi: 3821 Residenza: Roma (ma provincia)
|
Inviato: Ven Feb 26, 2010 12:03 am Oggetto: |
|
|
Ciao,
grazie per i "sei grande"
Spero vi sia utile.
Alla prossima.
Ciao da Ricky53 |
|
| Top |
|
 |
|