Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Invio mail oggetti in scadenza tramite Macro

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 mail oggetti in scadenza tramite Macro

Postdi ICEPOSTMAN » 19/02/15 14:32

Salve a tutti
ho un problema con questa macro...descrivo foglio Excel:
Colonna A = Descrizione - Colonna B = Costruttore - Colonna C = Modello - Colonna J = Scadenza (data gg/mm/aaaa)
L = Stato strumento - Colonna N = Ente di verifica
1) La macro si deve avviare automaticamente senza dover cliccare su attiva macro
2) deve mandare mail se nella colonna J (range es.da L5 a L420) c'è scritto "SCADUTO" O "IN SCADENZA"
4) nel corpo della mail deve esserci il contenuto delle celle A-B-C-J-L-N ovviamente riferita alla riga in scadenza o scaduto
Esempio: L5=IN SCADENZA - L8=SCADUTO il corpo della mail contiene celle A5-B5-C5-J5-L5-N5 ed a capo A8-B8-C8-J8-L8-N8
Attualmente ho questa macro che mi funziona solo con una riga e sono bloccato.
Ringrazio anticipatamente per l'aiuto.
Codice: Seleziona tutto
Sub email()
Dim myOutlook As Object
Dim myMailItem As Object
variabileEmailDelDestinatario = "indirizzo@indirizzo.in"
Dim TestoEmail As String
TestoEmail = [A5&" "&B5&" "&C5&" "&J5&" "&l5&" "&n5]
If [L5] <> "SCADUTO" Then Exit Sub
Set otlApp = CreateObject("Outlook.Application")
Set otlNewMail = otlApp.CreateItem(olMailItem)
'fName = ActiveWorkbook.Path & "\" & ActiveWorkbook.Name
With otlNewMail
.to = variabileEmailDelDestinatario
.Subject = "Attenzione: STRUMENTO IN SCADENZA"
.body = TestoEmail
.Display
.send
End With
Set OutMail = Nothing

Set OutApp = Nothing

Application.SendKeys "%a"

End Sub
ICEPOSTMAN
Newbie
 
Post: 5
Iscritto il: 19/02/15 11:33
Località: Seregno

Sponsor
 

Re: Invio mail oggetti in scadenza tramite Macro

Postdi Flash30005 » 19/02/15 16:20

Ma in quale colonna c'è l'indirizzo del destinatario?
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Invio mail oggetti in scadenza tramite Macro

Postdi ICEPOSTMAN » 19/02/15 16:25

Ciao Flash, grazie per la risposta

L'indirizzo è uno e sempre lo stesso quindi l'ho inserito nella macro...non so se sia giusto
ICEPOSTMAN
Newbie
 
Post: 5
Iscritto il: 19/02/15 11:33
Località: Seregno

Re: Invio mail oggetti in scadenza tramite Macro

Postdi Flash30005 » 19/02/15 16:40

Prova questa macro che è uno standard di invio email con l'aggiunta del ciclo For Next per processare tutte le righe
Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
Dim WS As Worksheet
Set WS = Worksheets("Foglio1")

UR = WS.Range("A" & Rows.Count).End(xlUp).Row
Set OutApp = CreateObject("Outlook.Application")
For RR = 2 To UR
If (WS.Range("L" & RR).Value = "SCADUTO" Or WS.Range("L" & RR).Value = "IN SCADENZA") And WS.Range("Z" & RR).Value = "" Then
'<<<< condizione che controlla anche che l'email non sia stata inviata in Col Z

BDT = WS.Range("A" & RR).Value
BDT = BDT & vbCrLf & WS.Range("B" & RR).Value & vbCrLf
BDT = BDT & WS.Range("C" & RR).Value
BDT = BDT & WS.Range("J" & RR).Value
BDT = BDT & WS.Range("L" & RR).Value
BDT = BDT & WS.Range("N" & RR).Value

EmailAddr = WS.Range("Colonna con indirizzo email destinatario" & RR).Value

EmailAddr = "Indirizzo@email.it" '<<<<(destinatario)
Subj = "Invio Email di avviso scadenza" 'oppure indicare la cella con la stringa oggetto
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
'.Attachments.Add OutFile
.Body = BDT
'.Display 'or use .send
.send
End With
    Application.Wait (Now + TimeValue("0:00:04"))
    Application.SendKeys "%a"
    Application.Wait (Now + TimeValue("0:00:04"))
WS.Range("Z" & RR).Value = "Email Inviata"  '<<<<<< scrive questa stringa nella colonna Z per evitare di inviare ulteriori email
End If
Next RR
Set OutMail = Nothing
Set OutApp = Nothing

End Sub


Non hai specificato cosa scrivere nell'oggetto della email ma puoi modificare la stringa

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Invio mail oggetti in scadenza tramite Macro

Postdi christianghz » 01/07/15 16:59

Ciao
ho modificato il codice così
Codice: Seleziona tutto
Sub Invioemail()
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
Dim WS As Worksheet
Set WS = Worksheets("FILE")

UR = WS.Range("A" & Rows.Count).End(xlUp).Row
Set OutApp = CreateObject("Outlook.Application")
For RR = 2 To UR
If (WS.Range("J" & RR).Value = "SCADUTO" Or WS.Range("J" & RR).Value = "IN SCADENZA") And WS.Range("Z" & RR).Value = "" Then
'<<<< condizione che controlla anche che l'email non sia stata inviata in Col Z

BDT = "Gentile CLIENTE" & vbCrLf
BDT = BDT & vbCrLf & "la documentazione della sua scheda CLIENTE in nostro possesso è " & WS.Range("J" & RR).Value & vbCrLf                        '<<<
BDT = BDT & vbCrLf & "Con la presente sono quindi a richiedere di trasmetterci, il prima possibile, una copia aggiornata ." & vbCrLf           '<<<
BDT = BDT & vbCrLf & "In attesa di Vs gentile riscontro porgo  " & vbCrLf
BDT = BDT & vbCrLf & "Cordiali Saluti"
BDT = BDT & vbCrLf & vbCrLf & "AZIENDA"
BDT = BDT & vbCrLf & "Via "
BDT = BDT & vbCrLf & "PAESE"

EmailAddr = WS.Range("E" & RR).Value

Subj = "Richiesta" 'oppure indicare la cella con la stringa oggetto
'
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = ""
.CC = ""
.BCC = EmailAddr
.Subject = Subj
'.Attachments.Add OutFile
.Body = BDT
'.Display 'or use .send
.send
End With
   
End If
Next RR
Set OutMail = Nothing
Set OutApp = Nothing

End Sub


Ho tolto il compleatamento inviato/non inviato che non mi serve
In colonna E ho celle compilate con mail (di chi ha doc scaduti) e celle vuote (chi ha doc validi)
però invia solo una parte delle mail a cui dovrebbe inviarlo, avete idea di cosa ho sbagliato?
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Invio mail oggetti in scadenza tramite Macro

Postdi Flash30005 » 01/07/15 18:02

Capire il motivo dal solo post penso non sia semplice se non si testi il tutto
magari avrai notato se esiste un qualcosa in comune tra le email che invia e quelle che dovrebbe inviare ma che non invia

ciao
Flash
Win7 + Office 2010 Ita
"Fotografica" al servizio dell'immagine

Ottime opportunità di lavoro (part-time o full-time) con guadagni immediati. Info in MP
Avatar utente
Flash30005
Moderatore
 
Post: 8460
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: Invio mail oggetti in scadenza tramite Macro

Postdi Anthony47 » 01/07/15 21:48

In effetti, non avendo qui nessuno capacita' paranormali, e' arduo capire dove hai sbagliato...
Riguarda questa istruzione:
Codice: Seleziona tutto
If (WS.Range("J" & RR).Value = "SCADUTO" Or WS.Range("J" & RR).Value = "IN SCADENZA") And WS.Range("Z" & RR).Value = "" Then
Essa significa
-se cella J="SCADUTO" allora invia email
-se cella J="IN SCADENZA" e contemporaneamente cella Z="" allora invia email
Se avevi in mente una logica diversa allora devi correggere.

Hai anche fatto male ad eliminare la Application.Wait (Now + TimeValue("0:00:04")) dopo ".Send"; magari riduce a 02 secondi, ma qualcosa devi mettercelo.

Ciao

PS: ma tu hai lavorato a Bonola?
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio mail oggetti in scadenza tramite Macro

Postdi christianghz » 13/07/15 11:31

Anthony47 ha scritto:In effetti, non avendo qui nessuno capacita' paranormali, e' arduo capire dove hai sbagliato...
Riguarda questa istruzione:
[code]If (WS.Range("J" & RR).Value = "SCADUTO" Or WS.Range("J" & RR).Value = "IN SCADENZA") And WS.Range("Z" & RR).Value = "" Then


Ho analizzato attentamente il db ma non trovo nulla di strano.

Ho tolto anche la parte di controllo in colonna Z quindi è diventato così:
If (WS.Range("J" & RR).Value = "SCADUTO" Or WS.Range("J" & RR).Value = "IN SCADENZA") Then
Perchè mi basta che invii la mail a chi in colonna J ha la voce "SCADUTO" o " IN SCADENZA" .

La Sub arriva a inviare mail fino a riga 131, inviando correttamente la mail a quelli che hanno le suddette diciture.

In realtà però, la colonna A è compilata in ogni riga fino a riga 267 e non capisco perchè si fermi prima visto che poi ce ne sono parecchi con voce Scaduto/In scadenza.
Quando finisce la procedura comunque, mi esce questo errore di runtime: "-2147467259" (80004005)
e facendo il debug mi evidenzia il .send
che si trova appena prima di End With
:?:

Anthony47 ha scritto:Hai anche fatto male ad eliminare la Application.Wait (Now + TimeValue("0:00:04")) dopo ".Send"; magari riduce a 02 secondi, ma qualcosa devi mettercelo.

Ok l'ho rimesso, ma rende lungo l'invio, è proprio necessario?

Anthony47 ha scritto:PS: ma tu hai lavorato a Bonola?
[/quote]
No, non so neanche dove sia! :oops: :)
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Invio mail oggetti in scadenza tramite Macro

Postdi Anthony47 » 14/07/15 02:43

Allora l'ipotesi che faccio e' che da riga 131 in avanti in col J non ci sia scritto esattamente "SCADUTO" o "IN SCADENZA", compreso maiuscolo ed eventuali piccoli ma significanti spazi.
Fai cosi':
in una colonna libera, supponiamo la Z, in Z2 metti la formula
Codice: Seleziona tutto
=--(O(J2="SCADUTO";J2="IN SCADENZA"))
Per una migliore visibilita' del risultato, formatta la celle con "Stile separatore" (corrisponde all'icona con 000 in tab Home, gruppo Numeri). Poi copia verso il basso.
In questo modo vedrai quali righe richiedono l'invio email (quelle con 1) e quali no (quelle con 0)
A questo punto cambia la riga If (WS.Range("J" & RR).Value = "SCADUTO" Or WS.Range("J" & RR).Value = "IN SCADENZA") Then
In
Codice: Seleziona tutto
If (WS.Range("Z" & RR).Value = 1 Then


Quanto alla wait, essa e' necessaria; vuol dire che prenderai un caffe' in piu'...

Bonola e' un quartiere di Milano, hai tutto il diritto di non conoscerlo...

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio mail oggetti in scadenza tramite Macro

Postdi christianghz » 15/07/15 11:19

Anthony47 ha scritto:Allora l'ipotesi che faccio e' che da riga 131 in avanti in col J non ci sia scritto esattamente "SCADUTO" o "IN SCADENZA", compreso maiuscolo ed eventuali piccoli ma significanti spazi.


In colonna J c'è una formula che restituisce "SCADUTO" o "IN SCADENZA",quindi mette sempre la stessa voce su tutte le righe
Potrebbe bloccarsi anche perchè in colonna E trova una cella vuota (senza mail) e il campo in colonna J è "SCADUTO", ma ho controllato e le celle in colonna E sono tutte compilate.

Veramente non capisco dove sia il problema

metto il file semplificato in allegato se può essere più chiaro.
http://www.filedropper.com/scadenze_1
christianghz
Utente Junior
 
Post: 72
Iscritto il: 03/02/14 17:58

Re: Invio mail oggetti in scadenza tramite Macro

Postdi Anthony47 » 16/07/15 02:15

Inserendo la Application.Wait con quel file la macro ha inviato 197 mail, che mi pare sia corretto.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13892
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Invio mail oggetti in scadenza tramite Macro":


Chi c’è in linea

Visitano il forum: Nessuno e 18 ospiti