Condividi:        

EXCEL - creazione macro per invio automatico email

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

Re: EXCEL - creazione macro per invio automatico email

Postdi JOHNNYC » 13/07/10 11:00

TE LO DETTO CHE MI STAVO PERDENDO IN UN BICCHIERE D'ACQUA. DEVO IMPOSTARE LA MACRO PERCHE' HO STRUTTURATO LE COLONNE IN QUESTO MODO:

COLONNA A: MAIL .TO
COLONNA B: MAIL .CC
COLONNA C: .SUBJCET
COLONNA D: .BODY (IL TESTO PUO' ESSERE SPECIFICO PER OGNI DESTINATARIO)
COLONNA E: FILE ALLEGATO (OGNI DESTINATARIO HA UN PROPRIO ALLEGATO)
COLONNA F: NOME FILE ALLEGATO

PERTANTO HO PIU' RIGHE CON I DIVERSI DESTINATARI E DEVO FARE IN MODO CHE LA MACRO LEGGA TUTTE LE RIGHE ED INVII LE MAIL AI DESTINATARI DESIGNATI CON GLI ALLEGATI SPECIFICATI.

SE NON SONO STATO CHIARO DIMMELO.
GRAZIE.
JOHNNY
JOHNNYC
Utente Junior
 
Post: 33
Iscritto il: 06/07/10 10:59
Località: Mantova

Sponsor
 

Re: EXCEL - creazione macro per invio automatico email

Postdi Flash30005 » 13/07/10 11:49

Non è buona educazione scrivere in maiuscolo (equivale a urlare)

ti manca un ciclo For...next
calcoli le righe occupate dagli indirizzi
es.:
Codice: Seleziona tutto
UE = Worksheets("Scheda").Range("A" & Rows.Count).End(xlUp).Row
For IE = 2 To UE
...

e con il ciclo for...next prenderai di volta in volta i valori contenuti nelle righe della variabile del ciclo

Codice: Seleziona tutto
...
BDT = Range("d" & IE).Value
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "Firma"
Nominat = Sheets("Scheda").Range("b1").Value
OutFile = Range("e" & IE).Value
EmailAddr = Range("a" & IE).Value
EmailAddr2 = Range("b" & IE).Value
Subj = Range("c" & IE).Value
...
...


Fai sapere
Ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL - creazione macro per invio automatico email

Postdi JOHNNYC » 13/07/10 12:15

Perfetta. Grande; grazie Flash.

Domanda: credi possa creare problemi se abbasso il tempo di attesa da 4 a 2 secondi?

P.S. il maiuscolo è stato una dimenticanza. Chiedo venia. ;)

Riporto la macro completa casomai possa servire ad altri utenti.

Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim EmailAddr2 As String
Dim Subj As String
Dim BodyText As String
UE = Worksheets("Scheda").Range("A" & Rows.Count).End(xlUp).Row
For IE = 2 To UE
'  (a)
Set OutApp = CreateObject("Outlook.Application")
''compilazione di un testo standard di accompagnamento
BDT = Range("d" & IE).Value
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "Firma"
''  (b)
Nominat = Sheets("Scheda").Range("b1").Value
OutFile = Range("e" & IE).Value
EmailAddr = Range("a" & IE).Value
EmailAddr2 = Range("b" & IE).Value
Subj = Range("c" & IE).Value

'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = EmailAddr2
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
.Display 'or use .send
'.SendKeys("%(i)")
End With
'  (c)
Set OutMail = Nothing
'
'  (d)
Set OutApp = Nothing

    Application.Wait (Now + TimeValue("0:00:04"))
    Application.SendKeys "%i"
    Application.Wait (Now + TimeValue("0:00:04"))

Next IE
End Sub
JOHNNYC
Utente Junior
 
Post: 33
Iscritto il: 06/07/10 10:59
Località: Mantova

Re: EXCEL - creazione macro per invio automatico email

Postdi Flash30005 » 13/07/10 13:19

Ehmm.. stavo rivedendo il tuo codice e mi sembra ci sia qualcosa che non quadra

Tu chiudi l'applicazione OutApp, e OutMail e poi effettui l'invio con Application.SendKeys :roll:
secondo me dovrebbe funzionare così
Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim EmailAddr2 As String
Dim Subj As String
Dim BodyText As String
UE = Worksheets("Scheda").Range("A" & Rows.Count).End(xlUp).Row
'  (a)
Set OutApp = CreateObject("Outlook.Application")
For IE = 2 To UE     '<<<< spostare qui dopo aver settato OutApp

''compilazione di un testo standard di accompagnamento
BDT = Range("d" & IE).Value
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "Firma"
''  (b)
Nominat = Sheets("Scheda").Range("b1").Value
OutFile = Range("e" & IE).Value
EmailAddr = Range("a" & IE).Value
EmailAddr2 = Range("b" & IE).Value
Subj = Range("c" & IE).Value

'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = EmailAddr2
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
.Display 'or use .send
'.SendKeys("%(i)")
End With
    Application.Wait (Now + TimeValue("0:00:04"))   '<<< spostare qui
    Application.SendKeys "%i"                                    '<<< spostare qui
    Application.Wait (Now + TimeValue("0:00:04"))   '<<< spostare qui
'  (c)
Set OutMail = Nothing

Next IE                                                             '<<< spostare qui

'
'  (d)
Set OutApp = Nothing

End Sub


Se l'applicazione OutApp rimane aperta (come in questa macro) penso che tu possa ridurre quei 4 secondi
prova e fai sapere

ciao
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL - creazione macro per invio automatico email

Postdi JOHNNYC » 13/07/10 13:43

Funziona perfettamente.

Mi puoi chiarire la differenza? (scusa la mia ignoranza ma sto imparando... 8) )

Grazie ancora.
Johnny
JOHNNYC
Utente Junior
 
Post: 33
Iscritto il: 06/07/10 10:59
Località: Mantova

Re: EXCEL - creazione macro per invio automatico email

Postdi Flash30005 » 13/07/10 13:56

La differenza sta nel fatto che il ciclo for...next ogni volta apriva e chiudeva l'applicazione (outlook)
all'interno di questo ciclo creava l'email e la inviava

nel secondo caso
l'applicazione rimane aperta
si crea l'email
viene inviata
...
ne crea un'altra
etc
fino alla fine degli invii
e alla fine del ciclo
chiude l'applicazione
in questo modo i tempi sono molto più ridotti
Secondo me, potresti mettere anche 1 secondo se non addirittura eliminare il tempo di attesa
soprattutto se modifichi ulteriormente la macro (da testare)
Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim EmailAddr2 As String
Dim Subj As String
Dim BodyText As String
UE = Worksheets("Scheda").Range("A" & Rows.Count).End(xlUp).Row
'  (a)
Set OutApp = CreateObject("Outlook.Application")
Set OutMail = OutApp.CreateItem(0)                '<<<<<< spsotare qui
For IE = 2 To UE

''compilazione di un testo standard di accompagnamento
BDT = Range("d" & IE).Value
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "Firma"
''  (b)
Nominat = Sheets("Scheda").Range("b1").Value
OutFile = Range("e" & IE).Value
EmailAddr = Range("a" & IE).Value
EmailAddr2 = Range("b" & IE).Value
Subj = Range("c" & IE).Value

With OutMail
.To = EmailAddr
.CC = EmailAddr2
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
.Display 'or use .send
'.SendKeys("%(i)")
End With
    Application.Wait (Now + TimeValue("0:00:01")) 
    Application.SendKeys "%i"                                   
    Application.Wait (Now + TimeValue("0:00:01"))

Next IE                     '<<< spostare qui
'  (c)
Set OutMail = Nothing  '
'  (d)
Set OutApp = Nothing

End Sub

ciao


N.B post modificato ore 15:08 - aggiunta macro modificata (da testare)
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL - creazione macro per invio automatico email

Postdi JOHNNYC » 13/07/10 14:39

La prima e-mail parte come una scheggia; poi va in errore:

errore di run-time'-2147221238 (8004010a)':
L'elemento è stato spostato o eliminato

e mi evidenzia in giallo

.To = EmailAddr

Johnny
JOHNNYC
Utente Junior
 
Post: 33
Iscritto il: 06/07/10 10:59
Località: Mantova

Re: EXCEL - creazione macro per invio automatico email

Postdi Flash30005 » 13/07/10 15:00

Procediamo per passi
ho ulteriormente modificato alle 15:08 la macro perché mi sono accorto che modificando in "Real Time" era stata cancellata una riga di codice.

1) verifica se la tua macro corrisponde a questa (il tempo l'ho portato appositamente a 1 secondo nell'ultima modifica), se nella tua ci sono 4 secondi sostituiscila con quella attuale e riprova.

2) mantieni i codici di 1 secondo di attesa oppure hai tolto completamente Application.Wait?

3) se aumenti il tempo a 2 secondi o 4 la macro funziona?

Se ancora non funziona,
la riga:
Set OutMail = OutApp.CreateItem(0) '<<<<<< spostare qui
va riportata all'interno del For...next (e quindi anche Set OutMail = Nothing)
in pratica, riprendi la macro precedente e funzionante

e ripeti le prove diminuendo i secondi di Application.Wait (da 4 a 2 poi a 1) o a commentare le righe codice dell'attesa
(una alla volta iniziando dalla prima che si incontra)

Fai sapere
Ciao

P.s. Non posso fare test, quindi lascio a te questa operazione
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: EXCEL - creazione macro per invio automatico email

Postdi JOHNNYC » 13/07/10 15:25

Ho riportato tutto all'interno del For... Next ed abbassato il tempo a 1 secondo e così funziona.

Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim EmailAddr2 As String
Dim Subj As String
Dim BodyText As String
UE = Worksheets("Scheda").Range("A" & Rows.Count).End(xlUp).Row
'  (a)
Set OutApp = CreateObject("Outlook.Application")

For IE = 2 To UE

Set OutMail = OutApp.CreateItem(0)                '<<<<<< spsotare qui
''compilazione di un testo standard di accompagnamento
BDT = Range("d" & IE).Value
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "Firma"
''  (b)
Nominat = Sheets("Scheda").Range("b1").Value
OutFile = Range("e" & IE).Value
EmailAddr = Range("a" & IE).Value
EmailAddr2 = Range("b" & IE).Value
Subj = Range("c" & IE).Value

With OutMail
.To = EmailAddr
.CC = EmailAddr2
.BCC = ""
.Subject = Subj
.Attachments.Add OutFile
.Body = BDT
.Display 'or use .send
'.SendKeys("%(i)")
End With
    Application.Wait (Now + TimeValue("0:00:01"))
    Application.SendKeys "%i"
    Application.Wait (Now + TimeValue("0:00:01"))
'  (c)
Set OutMail = Nothing  '
Next IE                     '<<< spostare qui

'  (d)
Set OutApp = Nothing

End Sub


provo ad eliminare l'attesa?

grazie.
Johnny
JOHNNYC
Utente Junior
 
Post: 33
Iscritto il: 06/07/10 10:59
Località: Mantova

Re: EXCEL - creazione macro per invio automatico email

Postdi JOHNNYC » 22/07/10 16:45

Ciao a tutti. Piccolo problema: il testo dell'e-mail che invio ha alcune parti formattate in modo particolare (sottolineato). La macro non mantiene la sottolineatura. Come posso risolvere il problema?
Grazie come sempre per l'aiuto.

Johnny
JOHNNYC
Utente Junior
 
Post: 33
Iscritto il: 06/07/10 10:59
Località: Mantova

Re: EXCEL - creazione macro per invio automatico email

Postdi Anthony47 » 22/07/10 20:32

Per quello che ne so io, togli l' invio automatico, formatti, premi Invia...

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

Re: EXCEL - creazione macro per invio automatico email

Postdi JOHNNYC » 23/07/10 08:26

Ciao Anthony,
forse mi sono espresso male. Provo a riformulare: il testo del messaggio viene preso da una colonna del file excel di origine, per cui la sottolineatura è all'origine. La macro serve per inviare diverse decine di e-mail. Se tolgo l'automatismo è tolto lo scopo. Quindi il problema è che nel momento in cui la macro "pesca" il testo dell'e-mail dal file excel, deve mantenere la formattazione esistente. L'impaginazione resta corretta, il problem sono i caratteri sottolineati che non sono mantenuti. Spero di essere stato più chiaro.
Grazie.

Johnny
JOHNNYC
Utente Junior
 
Post: 33
Iscritto il: 06/07/10 10:59
Località: Mantova

Re: EXCEL - creazione macro per invio automatico email

Postdi Anthony47 » 23/07/10 15:08

Ti eri spiegato gia' bene, e quanto ho suggerito e' l' unica cosa che mi viene in mente.
Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL - creazione macro per invio automatico email

Postdi kayplos » 29/07/10 08:23

Complimenti per la macro, molto ma molto interessante! 8)
vorrei allacciarmi alla discussione per chiedere se invece di inviare come corpo del messaggio il contenuto di una cella non fosse possibile utilizzare una mail tipo o il contenuto di un foglio word. Se si, che tipo di comando devo inserire nella macro?
grazie in anticipo e complimenti ancora!

Kayplos
kayplos
Newbie
 
Post: 1
Iscritto il: 29/07/10 08:06

Re: EXCEL - creazione macro per invio automatico email

Postdi Anthony47 » 30/07/10 00:12

Ciao kayplos e benvenuto nel forum.
Mah, lavorare da Excel per inviare un testo di Word tramite Outlook rischia di essere contorto... Poi non conosco che superficialmente l' automazione possibile su Outlook, che non e' nemmeno il mio software di posta predefinito. Insomma posso solo suggerire un accrocchio che porta il testo dal doc word ad excel, poi ti crei il "body" della mail come descritto nella discussione in cui ti sei inserito.
Come scrissi tempo fa (viewtopic.php?p=324269):
1) Se vuoi aprire un file doc da excel puoi usare qualcosa come
Codice: Seleziona tutto
    Sub ApriDoc()
    Dim applicWD As Object, WordDoc As Object

    Set applicWD = CreateObject("Word.Application")
    applicWD.Visible = True
    Set WordDoc = applicWD.Documents.Open(Filename:="C:\Ciao.doc")

    End Sub

E per chiuderlo
Codice: Seleziona tutto
    WordDoc.Close
      applicWD.Quit
      Set WordDoc = Nothing
      Set applicWD = Nothing
    End Sub


Modificando la prima puoi copiare tutto il testo del doc aperto e copiarlo in excel; ad esempio:
Codice: Seleziona tutto
' Precedenti istruzioni
    Set WordDoc = applicWD.Documents.Open(Filename:="C:\Ciao.doc")
'AGGIUNTE:
    applicWD.Selection.WholeStory
    applicWD.Selection.Copy
    Range("A30").Select
    ActiveSheet.Paste
    Application.CutCopyMode = False
    WordDoc.Close   'CHIUSURA DOC e WORD
   applicWD.Quit
   Set WordDoc = Nothing
   Set applicWD = Nothing
End Sub

Nella prima parte viene copiato il testo del doc aperto e viene incollato da A30 in giu'; poi si chiude file e applicazione word. Le istruzioni sono ottenute con registra macro, non ho fatto nessuna ottimizzazione perche' l' obiettivo non e' quello.

Non escludo che combinando la macro per aprire il doc Word e quella per inviare l' email si possa copiare da doc e incollare direttamente nel corpo della mail, avendo attivato questo campo con il numero giusto di Tab (ripetere SendKeys ("{TAB}") quante volte serve); e' un gioco di pazienza e di tempo che al momento non ho, eventualmente prova da solo e fai sapere dove arrivi.

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

Re: EXCEL - creazione macro per invio automatico email

Postdi satoshj » 04/09/10 23:33

Ciao a tutti...
Guardando i post precedenti ho imparato molto ma non sono ancora riuscito a risolvere il mio problema.

ho questa macro:

Workbooks.Open Filename:=mDir & "\" & nome & ".xls"
Destin = "UTENTE@hotmail.com"
ActiveWorkbook.SendMail Recipients:=Destin, Subject:="Invio cambio e formazione 1A Giornata"
ActiveWindow.Close
End sub

questa macro prende il file :=mDir & "\" & nome & ".xls" lo allega alla mail e la spedisce

il problema è che la mail non viene spedita ma parcheggiata in posta in uscita finchè non premo il tasto invia/ricevi
come posso fare per fare in modo che ciò avenga automaticamente.
la soluzione deve essere buona sia per outlook express che di office.
inoltre vorrei che tale macro una volta inviata la mail cancellasse dal PC il file appena inviato.
grazie mille
satoshj
Newbie
 
Post: 6
Iscritto il: 30/03/10 19:22

Re: EXCEL - creazione macro per invio automatico email

Postdi Anthony47 » 05/09/10 01:06

Se elimini l' istruzione "ActiveWindow.Close" dovrebbe comparirti un messaggio che ti chiede se vuoi veramente inviare quella mail e dovresti cliccare Si. Esiste un programma che si chiama ClickYes che puo' rispondere Yes automaticamente ma non lo uso e non so quali implicazioni ha (vedi viewtopic.php?f=26&t=62073&start=20#p481166)

Un altro sistema che consente maggiore automazione prevede l' uso di Outlook (componente di Office); trovi un esempio di macro qui: viewtopic.php?f=26&t=83835&p=479791#p479791
Come attachment alla mail indicherai il tuo file (che non serve aprire), tramite l' istruzione
.Attachments.Add mDir & "\" & nome & ".xls"
(al posto di .Attachments.Add OutFile)
Altra discussione interessante e' stata questa: viewtopic.php?f=26&t=85263

Ciao, fai sapere.
Avatar utente
Anthony47
Moderatore
 
Post: 19196
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: EXCEL - creazione macro per invio automatico email

Postdi satoshj » 05/09/10 09:51

Ciao.
ho inserito questa macro:

Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
' (a)
Set OutApp = CreateObject("Outlook.Application")
''compilazione di un testo standard di accompagnamento
BDT = "Ti invio il risultato Portfolio per l'orientamento."
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "Rea"
'' (b)
OutFile = mDir & "\" & nome & ".xls"
EmailAddr = Range("h5").Value
Subj = "Invio risultati questionario"
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = "follebucci@hotmail.com"
.CC = ""
.BCC = ""
.Subject = Subj
.Attachments.Add mDir & "\" & nome & ".xls"
.Body = BDT
.Display 'or use .send
'.send
End With
' (c)
Set OutMail = Nothing
'
' (d)
Set OutApp = Nothing

Application.Wait (Now + TimeValue("0:00:04"))
Application.SendKeys "%a"
Application.Wait (Now + TimeValue("0:00:04"))
'
'Rename Image files
'Name "C:\ESITI\" & Nominat & "_ScrSh.jpg" As "C:\ESITITX\ " & Nominat & "_ScrSh.jpg"

End Sub


però è come se avessi fatto un passo indietro.
praticamente adesso mi si apre outlook pronto per l'invio (prima almeno inviava automaticamente)
una volta inviata la posta mi si parcheggia ancora in posta in uscita.
satoshj
Newbie
 
Post: 6
Iscritto il: 30/03/10 19:22

Re: EXCEL - creazione macro per invio automatico email

Postdi Anthony47 » 05/09/10 15:49

L' argomento e' stato sviscerato sia in questa discussione che in nelle due che ti ho linkato: non dvi usare word come editor delle mail (Menu /Strumenti /Opzioni, tab Formato posta, togli la spunta a controllo Utilizza Microsoft Word per modificare i messaggi di posta elettronica); se hai Outlook in inglese devi usare Contr-s e non Contr-a (userai quindi Application.SendKeys "%s").
Inoltre ci sono dei settaggi di Outlook che potrebbero impedire l' invio di email:
-account non settato con i suoi parametri; per funzionare in automatico dovresti prima riuscire a inviare una mail preparata manualmente in Outlook, fai anche questa prova quindi.
-hai l' invio automatico disattivato: Menu /Strumenti /Opzioni, tab Configurazione della posta, spunta "Invia automaticamente alla connessione"
-hai Outlook settato in modalita' Fuori rete: Menu /File, controlla che non sia spuntato Fuori rete
Ricorda che parliamo di Outlook, non Outlook express.

Se comunque hai problemi, valuta se non sia sufficiente il "metodo SendMail", quello della macro da te postata, premendo Ok quando ti chiede se vuoi veramente inviare una mail.

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

Re: EXCEL - creazione macro per invio automatico email

Postdi Flash30005 » 09/09/10 00:56

Il post di Satoshj è stato spostato QUI

Il quesito posto non è inerente a questo topic.



Questo post sarà cancellato dopo che Satoshj avrà ritrovato il nuovo topic
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

PrecedenteProssimo

Torna a Applicazioni Office Windows


Topic correlati a "EXCEL - creazione macro per invio automatico email":


Chi c’è in linea

Visitano il forum: Marius44 e 50 ospiti