Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

Macro excel con invio mail automatico

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: Macro excel con invio mail automatico

Postdi sinner69 » 10/06/12 10:51

Ti spiego in breve cosa dovrebbe fare la procedura scritta nei messaggi precedenti:
all'apertura del file excel indifferemtemente quale sia il foglio visualizzato all'apertura la procedura dovrebbe scattare in automatico andare nel foglio Per Cantiere e controllare la prima colonna G3:G100 e mostrare un messaggio a video di quante scadenze ci sono, e se ci sono scadenze inviare un email con la riga la data di scadenza e il nome associato. dopo di ciò fare la stessa cosa per la colonna k3:k100 e la colonna O3:0100. finite le colonne da controllare nel foglio Per Cantiere dovrebbe controllare la colonna G3:G100 del foglio Scadenze Preventivi e fare sempre la stessa cosa mostrare a video se ci sono scadenze e se ce ne sono inviare l'email indicando la riga la data e il nome associato.
Spero di essermi spiegato bene
Ciao e buona domenica
A Buon Rendere...
Avatar utente
sinner69
Utente Junior
 
Post: 44
Iscritto il: 03/06/12 20:59
Località: Avola

Sponsor
 

Re: Macro excel con invio mail automatico

Postdi sinner69 » 10/06/12 15:31

Ciao Anthony47,
grazie di tutto ma ho risolto da solo adesso funziona tutto come volevo ho sistemato un pò di cose sbagliavo a chiudere i vari cicli e settare ancune variabili.. cmq adesso funziona perfettamente
Ciao e grazie ancora 8)
A Buon Rendere...
Avatar utente
sinner69
Utente Junior
 
Post: 44
Iscritto il: 03/06/12 20:59
Località: Avola

Re: Macro excel con invio mail automatico

Postdi ricky53 » 10/06/12 15:51

Ciao,
bene.
Puoi inserire, a beneficio di altri utenti, il codice finale.
Grazie per la collaborazione
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro excel con invio mail automatico

Postdi sinner69 » 10/06/12 22:44

Ciao, ecco la procedura perfettamente funzionante.
Sicuramente si potrà ottimizzare e migliorare :D , ma per quello che serve a me è OTTIMA così 8)

Codice: Seleziona tutto
Private Sub Workbook_Open()
Dim OLook As Object 'Outlook.Application
Dim MItem As Object 'Outlook.MailItem
'Dim FSend As Boolean 'Flag "Send"
Dim Inter As String, CScad As Integer
Dim MAddr As String, MSubj As String
Dim foglio As String, NScad As Integer
foglio = Cells(2, 16).Value

MAddr = "aaaaaaa@gmail.com"   '<<<< Destinatario
Inter = "G3:G100"    '<<<< Lista delle celle che saranno controllate per scadenza
'
ListaF = Array("Per Cantiere", "Scadenze Preventivi")   '<<<ElencoFogli da controllare
For Each LF In ListaF
    Sheets(LF).Select
    If LF = "Per Cantiere" Then
        ListaC = Array("G3:G100", "K3:K100", "O3:O100") '<<< Elenco celle da controllare
        For Each LC In ListaC
            NScad = NScad + 1
            For Each scad In Range(LC)
                'If scad <> "" Then
                If scad <= (Int(Now) + 6) And scad >= Int(Now) Then
                    CScad = CScad + 1
                     Mex = Mex & scad.Row & "  /  " & scad.Offset(0, -3).Value & " " & " Data " & NScad & "° scad. : " & Format(scad.Value, "dd/mm/yyyy") & vbCrLf
                'End If
                End If
            Next scad
           
            MsgBox ("Ci sono " & CScad & " righe alla " & NScad & " ° scadenza inferiore al " & (Int(Now) + 6) & " del foglio: " & LF)
            '
            If CScad > 0 Then
            '
            CScad = 0
            MSubj = "Warning scadenza" & " " & LF '<<<< Subject della mail
            Set OLook = CreateObject("Outlook.Application")
            Set MItem = OLook.createitem(0)
            MItem.to = MAddr
            MItem.Subject = MSubj
            MItem.body = "Scadenza voce: riga / Cliente / data " & vbCrLf & Mex
            MItem.send
            Mex = ""
            Application.Wait (Now + TimeValue("0:00:10"))
            Set OLook = Nothing
            Set MItem = Nothing
            End If
        Next LC
    ElseIf LF = "Scadenze Preventivi" Then
        Inter = "G3:G100"
        For Each scad In Range(Inter)
                'If scad <> "" Then
                If scad <= (Int(Now) + 6) And scad >= Int(Now) Then
                    CScad = CScad + 1
                     Mex = Mex & scad.Row & "  /  " & scad.Offset(0, -3).Value & " " & " Data prima scad. : " & Format(scad.Value, "dd/mm/yyyy") & vbCrLf
                'End If
                End If
        Next scad
            MsgBox ("Ci sono " & CScad & " righe alla prima scadenza inferiore al " & (Int(Now) + 6) & " del foglio: " & LF)
            '
            If CScad > 0 Then
            '
            MSubj = "Warning scadenza" & " " & LF '<<<< Subject della mail
            Set OLook = CreateObject("Outlook.Application")
            Set MItem = OLook.createitem(0)
            MItem.to = MAddr
            MItem.Subject = MSubj
            MItem.body = "Scadenza voce: riga / Cliente / data " & vbCrLf & Mex
            MItem.send
            Application.Wait (Now + TimeValue("0:00:10"))
            Set OLook = Nothing
            Set MItem = Nothing
            End If
    End If
Next LF

End Sub



Anche se dal codice è evidente, Spiego brevemente quello che fa la procedura:
come si esegue la procedura controlla due diversi fogli di lavoro dove ci sono delle diverse colonne che riportano delle date di scadenza.
1) Controlla le scadenze e memorizza quale sono le date in scadenza
2) mostra un messaggio a video indifferentemente sia che vi siano scadenze o no per ogni colonna che controlla di ogni relativo foglio di lavoro.
3) Se ci delel scadenze invia un email riportando nel corpo dell'email quale sono le date in scadenza la riga e il nome del cliente associato alla data.
Nel Dettaglio la procedura controlla nel foglio Per cantere controllando le colonne G3:G100, O3:O100, e K3:100
per ogni colonna che controlla si memorizza quante sono le scadenze e mostra un messaggio a video indifferentemente se ci siano o no scadenze e invia un email se le scadenze sono maggiori di 0. Quindi se per ogni colonna ci sono almeno una scadenza inviera tre email contenente in ogni email la data di scadenza la riga a cui si riferisce e il nome del cliente associato a tale data per ogni scadenza trovata.
Dopo di ciò passa al foglio Scadenze preventivi e fa la medesima cosa con la differenza che nel foglio Scadenze preventivi la colonna da controllare per le scadenze è solo la G3:G100

Spero di essere stato chiaro :)
A buon Rendere a tutti :P
A Buon Rendere...
Avatar utente
sinner69
Utente Junior
 
Post: 44
Iscritto il: 03/06/12 20:59
Località: Avola

Re: Macro excel con invio mail automatico

Postdi ricky53 » 10/06/12 23:09

Ciao,
OTTIMO !!!
Questo è il modo migliore per concludere una discussione.

Grazie infinite per la collaborazione
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. W7; Office 2003-10-13-16
Avatar utente
ricky53
Utente Senior
 
Post: 4223
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Macro excel con invio mail automatico

Postdi sinner69 » 06/07/12 17:23

Salve a tutti,
premesso che il codice sopra ha funzionato correttamente fino ad adesso, ora vorrei fare una piccola modifica che non so come si fa eheheh.
mi spiego :
poichè il mio interesse è che l'email venga spedita all'apertura del file in automatico mi sorge il problema che ogni qual volta il file viene chiuso e poi riaperto viene spedita l'email.
Mi chiedevo si può inserire un controllo che in tutta la giornata l'email viene spedita soltanto alla prima apertura del file ?
ad esempio di mattina arrivo in ufficio apro il file e in automatico parte l'email, poi lo chiudo e lo riapro di pomeriggio ma poichè l'email è già stata spedita la mattina all'apertira del file non dovrà essere rispedita l'email finche non scatta il giorno e di conseguenza poi di nuovo all'apertura del file verra spedita l'email soltanto la prima volta che verrà aperto il file

Spero di essermi spiegato bene
io pensavo ad una cosa del genere. nel foglio in una cella inserire un campo a valore zero all'apertura del file verrà controllato quel campo se è settato a 0 allora inviera l'email e setterà quel campo ad 1 in modo tale che tutte le altre volte che verrà aperto il file troverà quel campo settato ad 1 e non inviera l'email, poi pensavo che cmq questo campo adesso rimarra settato ad 1 fine a fine giornata quindi ci vorrebbe un meccanismo che a scattare la mezza notte quindi al giorno successivo questo campo dovrà essere settato a 0 in modo tale che all'apertura del file il giorno successivo per la prima volta che verrà aperto il file il controllo del campo trova il valore a 0
A Buon Rendere...
Avatar utente
sinner69
Utente Junior
 
Post: 44
Iscritto il: 03/06/12 20:59
Località: Avola

Re: Macro excel con invio mail automatico

Postdi Flash30005 » 06/07/12 22:52

A fine macro-invio scrivi la data odierna in una cella del foglioX
es.: Worksheets("Foglio1").range("L1").value = date
All'apertura del foglio nella macro esistente (all'inizio) inserisci la condizione che se nel Foglio1 cella L1 è uguale alla data odierna salta la macro che hai altrimenti la esegue
oppure la condizione che Se Foglio1 cella L1 <> da data odierna (date) allora esegue la macro

è tutto chiaro?

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: Macro excel con invio mail automatico

Postdi Anthony47 » 07/07/12 02:16

In aggiunta a quanto scritto da Flash (vedi sopra), in risposta ad altra richiesta: la macro non necessita che la libreria di gestione Outlook sia linkata all' interno del vba editor, perche' lavora in "late binding"; comunque, all' occorrenza, dall' editor delle macro: Menu /Strumenti /Riferimenti, si scorre l' elenco, si spunta la voce richiesta, Ok.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro excel con invio mail automatico

Postdi sinner69 » 07/07/12 15:14

salve grazie per la risposta ma non capisco come faccio a inserire la la condizione che se nel Foglio1 cella L1 è uguale alla data odierna salta la macro che hai altrimenti la esegue

Grazie
A Buon Rendere...
Avatar utente
sinner69
Utente Junior
 
Post: 44
Iscritto il: 03/06/12 20:59
Località: Avola

Re: Macro excel con invio mail automatico

Postdi Flash30005 » 07/07/12 21:30

Questa è la tua macro con aggiunta del controllo cella L1 su foglio1
Codice: Seleziona tutto
Private Sub Workbook_Open()
If Sheets("foglio1").range("L1").value <> Date then  '<<<<< aggiunta condizione data
Dim OLook As Object 'Outlook.Application
Dim MItem As Object 'Outlook.MailItem
'Dim FSend As Boolean 'Flag "Send"
Dim Inter As String, CScad As Integer
Dim MAddr As String, MSubj As String
Dim foglio As String, NScad As Integer
foglio = Cells(2, 16).Value

MAddr = "aaaaaaa@gmail.com"   '<<<< Destinatario
Inter = "G3:G100"    '<<<< Lista delle celle che saranno controllate per scadenza
'
ListaF = Array("Per Cantiere", "Scadenze Preventivi")   '<<<ElencoFogli da controllare
For Each LF In ListaF
    Sheets(LF).Select
    If LF = "Per Cantiere" Then
        ListaC = Array("G3:G100", "K3:K100", "O3:O100") '<<< Elenco celle da controllare
        For Each LC In ListaC
            NScad = NScad + 1
            For Each scad In Range(LC)
                'If scad <> "" Then
                If scad <= (Int(Now) + 6) And scad >= Int(Now) Then
                    CScad = CScad + 1
                     Mex = Mex & scad.Row & "  /  " & scad.Offset(0, -3).Value & " " & " Data " & NScad & "° scad. : " & Format(scad.Value, "dd/mm/yyyy") & vbCrLf
                'End If
                End If
            Next scad
           
            MsgBox ("Ci sono " & CScad & " righe alla " & NScad & " ° scadenza inferiore al " & (Int(Now) + 6) & " del foglio: " & LF)
            '
            If CScad > 0 Then
            '
            CScad = 0
            MSubj = "Warning scadenza" & " " & LF '<<<< Subject della mail
            Set OLook = CreateObject("Outlook.Application")
            Set MItem = OLook.createitem(0)
            MItem.to = MAddr
            MItem.Subject = MSubj
            MItem.body = "Scadenza voce: riga / Cliente / data " & vbCrLf & Mex
            MItem.send
            Mex = ""
            Application.Wait (Now + TimeValue("0:00:10"))
            Set OLook = Nothing
            Set MItem = Nothing
            End If
        Next LC
    ElseIf LF = "Scadenze Preventivi" Then
        Inter = "G3:G100"
        For Each scad In Range(Inter)
                'If scad <> "" Then
                If scad <= (Int(Now) + 6) And scad >= Int(Now) Then
                    CScad = CScad + 1
                     Mex = Mex & scad.Row & "  /  " & scad.Offset(0, -3).Value & " " & " Data prima scad. : " & Format(scad.Value, "dd/mm/yyyy") & vbCrLf
                'End If
                End If
        Next scad
            MsgBox ("Ci sono " & CScad & " righe alla prima scadenza inferiore al " & (Int(Now) + 6) & " del foglio: " & LF)
            '
            If CScad > 0 Then
            '
            MSubj = "Warning scadenza" & " " & LF '<<<< Subject della mail
            Set OLook = CreateObject("Outlook.Application")
            Set MItem = OLook.createitem(0)
            MItem.to = MAddr
            MItem.Subject = MSubj
            MItem.body = "Scadenza voce: riga / Cliente / data " & vbCrLf & Mex
            MItem.send
            Application.Wait (Now + TimeValue("0:00:10"))
            Set OLook = Nothing
            Set MItem = Nothing
            End If
    End If
Next LF
Sheets("foglio1").range("L1").value = Date '<<<<< aggiunge data odierna alla fine del processo
End if
End Sub

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: Macro excel con invio mail automatico

Postdi sinner69 » 09/07/12 11:09

Grazie mille
PERFETTO!
A Buon Rendere...
Avatar utente
sinner69
Utente Junior
 
Post: 44
Iscritto il: 03/06/12 20:59
Località: Avola

Re: Macro excel con invio mail automatico

Postdi alerry » 04/09/12 08:43

Ciao a tutti
sono nuovo del forum, la macro in questione mi è stata utilissima per il lavoro che svolgo
avrei comunque sia una richiesta da fare
quando riceviamo la mail il codice ti da come risposta il numero della cella corrispondente alla data di scadenza + la data di scadenza, io vorrei che al numero della cella mi prendesse il nome di un dipendente, faccio un esempio
per il momento la risposta è 24 / 01/01/2012
vorei che la macro più tosto che darmi il 24 mi dia il nome del dipendente che si trova sempre nella riga 24 ma nella cella A24
grazie mille
ciao :)
alerry
Newbie
 
Post: 2
Iscritto il: 04/09/12 08:29

Re: Macro excel con invio mail automatico

Postdi Flash30005 » 04/09/12 10:07

Ciao Alerry e benvenuto nel Forum
la variabile interessata a comporre quel corpo messaggio è "Mex" e la trovi in due punti della macro
Riporto qui la sua costruzione:
Codice: Seleziona tutto
Mex = Mex & scad.Row & "  /  " & scad.Offset(0, -3).Value & " " & " Data " & NScad & "° scad. : " & Format(scad.Value, "dd/mm/yyyy") & vbCrLf

credo che quel 24 (del tuo esempio) si riferisca alla variabile scad.Row che dovrai sostituire con una variabile che punti alla colonna dove hai il nome del dipendente.
Non sapendo la colonna dipendente puoi assegnarla da solo considerando che la macro sta processando la colonna "G"
quindi conta quante colonne dista la colonna dipendente dalla colonna "G" se si trova a sinistra di G dovrai inserire il segno - (meno) al secondo parametro della funzione Offset, altrimenti nulla in un codice come questo
Codice: Seleziona tutto
scad.Offset(0, -6).Value
significa che prelevi il valore nella colonna A
quindi Mex sarà così costruito così:
Codice: Seleziona tutto
Mex = Mex & scad.Offset(0, -6).Value  & "  /  " & scad.Offset(0, -3).Value & " " & " Data " & NScad & "° scad. : " & Format(scad.Value, "dd/mm/yyyy") & vbCrLf


Fai sapere
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: Macro excel con invio mail automatico

Postdi alerry » 04/09/12 13:33

grazie mille
adesso si che il risultato è quello che mi aspettavo dalla macro
Sei stato gentilissimo

ho un ultima domanda da farti
quando lancio la macro tramite pulsante mi compare una finestra con scritto:
Un programma sta tentando di inviare automaticamente la posta elettronica, Consentire l' operazione SI o NO
c' è un modo per eliminare questa finestra, ovvero dirgli al programma che lo può lanciare automaticamente senza avere conferma di consenso.
Grazie mille per la tua celere risposta di questa mattina
Saluti
alerry
Newbie
 
Post: 2
Iscritto il: 04/09/12 08:29

Re: Macro excel con invio mail automatico

Postdi Flash30005 » 04/09/12 14:33

Non so se è windows o un tuo programma di protezione ad inviarti quel messaggio
(non uso outlook di office e so che è abbastanza complesso)
Sicuramente risalendo al programma potrai disabilitare questa sicurezza
se non riesci da solo prova a mandare un'immagine del messaggio (screenshot) per poter verificare dalla testata del messaggio quale programma avvisa.

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: Macro excel con invio mail automatico

Postdi Anthony47 » 04/09/12 15:36

Quel messaggio e' originato da Outlook e serve a prevenire invii fatti da macro maliziose.
Si puo' aggirare usando SendKeys, come descritto in questo topic: viewtopic.php?f=26&t=83835&start=20#p479791
Per ulteriori note, compreso le differenze tra Outlook in Italiano e quello in Inglese, si puo' anche dare uno sguardo a quest' alto topic: viewtopic.php?f=26&t=85263

In pratica va sostituito questo pezzo
MItem.send
Application.Wait (Now + TimeValue("0:00:10"))
Set OLook = Nothing
Set MItem = Nothing
Con quest' altro:
Codice: Seleziona tutto
MItem.Display
Set OLook = Nothing
Set MItem = Nothing
    Application.Wait (Now + TimeValue("0:00:04"))
    Application.SendKeys "%a"
    Application.Wait (Now + TimeValue("0:00:04"))
'

Ciao a tutti
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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

mi accodo alla discussione

Postdi b767_400x » 13/02/15 09:03

buon di sono nuovissimo del forum
vorrei avere sapere se si puo inviare una mail in automatico quando due valori in un foglio sono uguali
in pratica io ho un file di excel che si genera durante il giorno e necessito avere una mail quando si creano dei doppioni rispetto a dei valori che esistono in un altro foglio
b767_400x
Newbie
 
Post: 2
Iscritto il: 13/02/15 08:56

Re: Macro excel con invio mail automatico

Postdi Flash30005 » 13/02/15 10:44

Buongiorno B767_440X e benvenuto nel forum

La macro per invio email (anche con allegato) è
questa

Non essendo stato molto preciso con i riferimenti delle coordinate da confrontare posso solo dire che puoi richiamare la macro se la condizione (dei doppioni) è soddisfatta, ad esempio

Codice: Seleziona tutto
Sub controlla()
If ValFoglio1 = ValFoglio2 then call Invioemail  '<<<< nome della macro nel link postato
end sub


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: Macro excel con invio mail automatico

Postdi Anthony47 » 13/02/15 15:32

Il codice suggerito vale per Outlook2003 e inferiori.
Poiche' da Outlook2007 la gestione delle procedure antispam sono variate potrebbe essere necessario un aggiustamento; quindi prova e se non funziona spiega che cosa hai fatto e che cosa non ha funzionato, ma indica anche la versione di Outlook in uso.

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: 13891
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro excel con invio mail automatico

Postdi b767_400x » 15/02/15 10:10

grazie dell'informazione
m,
b767_400x
Newbie
 
Post: 2
Iscritto il: 13/02/15 08:56

Precedente

Torna a Applicazioni Office Windows


Topic correlati a "Macro excel con invio mail automatico":


Chi c’è in linea

Visitano il forum: Nessuno e 11 ospiti