Tra le tante versioni di macro potremmo partire da quanto proposto ad altro Utente in questa discussione, con poche revisioni:
viewtopic.php?f=26&t=104487Inoltre, per evitare doppi invii di email useremo due colonne libere per indicare la data di invio email. Io ho usato colonna Z per la mail di invio scadenza Assicurazione e colonna AA per scadenza Revisione.
Per MIA semplificazione ti suggerisco due macro per l'invio delle mail; quella per le scadenze Assicurazioni corrisponde a questo codice:
- Codice: Seleziona tutto
Sub InvioemailAss()
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=104487
'Vedi http://www.pc-facile.com/forum/viewtopic.php?f=26&t=108380
Dim OutApp As Object, OutMail As Object
Dim EmailAddr As String, Subj As String
Dim BDT As String, I As Long, myCnt As Long 'FIN QUI SONO "DICHIARAZIONI"
' (a)
Sheets("Foglio1").Select '<<< Il tuo Foglio con i nominativi e le date
'compilazione del testo della mail
BDT = "Elenco delle ASSICURAZIONI in scadenza al " & Format(Date, "yyyy-mmm-dd") & vbCrLf '<<<**
For I = 2 To Cells(Rows.Count, "E").End(xlUp).Row
If IsDate(Cells(I, "E").Value) Then
If Cells(I, "E") < (Date + 7) And (Date - Cells(I, "Z")) > 5 Then '<<<**
BDT = BDT & Cells(I, "A") & " Scade al " & Format(Cells(I, "E"), "dd-mmm-yy") & vbCrLf '<<<**
myCnt = myCnt + 1
Cells(I, "Z") = Date
End If
End If
Next I
BDT = BDT & vbCrLf & "Cordiali saluti" & vbCrLf
BDT = BDT & "La tua macro"
'' (b)
If myCnt = 0 Then Exit Sub 'Nessuna scadenza, si termina senza azioni
'
'DA QUI SI CREA E INVIA LA MAIL:
Set OutApp = CreateObject("Outlook.Application")
EmailAddr = "TuaEmail@Dominio.Com" '<<< INDIRIZZO EMAIL
Subj = "Scadenze del " & Format(Date, "yyyy-mmm-dd") ' OGGETTO DELLA MAIL
Set OutMail = OutApp.CreateItem(0)
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Body = BDT
.send
End With
' (c)
Set OutMail = Nothing
' (d)
Set OutApp = Nothing
'
Application.Wait (Now + TimeValue("0:00:02"))
End Sub
Questa macro va inserita in un modulo standard del vba; partendo da excel:
-Alt-F11 per aprire l' editor delle macro; Menu /Inserisci /Modulo; copia il codice e incollalo nel frame di dx.
Le istruzioni marcate <<< vanno personalizzate come da commento;
Creerai poi una seconda copia della macro, che chiamerai Sub InvioemailRevis in cui dovrai modificare le le righe marcate <<<**
-invece del riferimento a colonna E userai colonna G
-invece del riferimento a colonna Z userai colonna AA
-Come primo valore di BDT metterai "Elenco delle REVISIONI in scadenza etc etc"
-la riga
If Cells(I, "E") < (Date + 7) And (Date - Cells(I, "Z")) > 5 Then e' piu' complessa da modificare; nella Sub InvioemailRevis deve diventare
- Codice: Seleziona tutto
If Cells(I, "G") < (Date + 30) And (Date - Cells(I, "AA")) > 15 Then
In questo modo le macro fanno un invio 7 gg /30 gg prima della scadenza; ma se dopo 5 gg /15 gg la scadenza non e' stata prolungata viene fatto un secondo invio mail, e cosi' ogni 5 gg /15 gg.
Se vuoi avviare queste macro automaticamente all' apertura del file, allora inserisci nel modulo Questa-Cartella_diLavoro del vba (visibile nel frame Progetto - VBAProject a sinistra) questo codice:
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Call InvioemailAss
Call InvioemailRevis
End Sub
Se vuoi lanciare manualmente una macro:
-da Excel premi Alt-F8, selezion il nome della macro dall' elenco delle macro disponibili, premi Esegui.
Ciao