Quel calendario non ha nessuna struttura dati, mi ricorda tanto i calendari cartacei che si tengono sulla scrivania per scriverci a penna nella prima posizione che capita sotto mano.
Cio' detto, se l'utente e' scrupoloso nel segnare le attivita' sempre in colonna M (**) e la data di scadenza sempre nella colonna "precedente", allora si potrebbe usare questa macro:
- Codice: Seleziona tutto
Sub CkDDlines()
Dim myMon As String, tDay As Date, aSSegn As String, lstAss As Long
Dim mySc As String, scCnt As Long, J As Long
Dim OutApp As Object
Dim OutMail As Object
Dim EmailAddr As String
Dim Subj As String
Dim BodyText As String
'
'
aSSegn = "M" '<<< La colonna con i compiti
tDay = Int(Now)
mySc = "Scadenze da segnalare: " & vbCrLf
For J = 0 To 1
myMon = Format(tDay + 15 * J, "mmmm")
Sheets(myMon).Select
lstAss = Cells(Rows.Count, aSSegn).End(xlUp).Row
For i = 1 To lstAss
If Cells(i, aSSegn) <> "" And Cells(i, aSSegn).Offset(0, -1) <> "" Then
If (Cells(i, aSSegn).Offset(0, -1) - Day(tDay)) <= 5 And Cells(i, aSSegn).Offset(0, -1) >= Day(tDay) Then
mySc = mySc & myMon & " " & Cells(i, aSSegn).Offset(0, -1) & ", " & Cells(i, aSSegn) & vbCrLf
scCnt = scCnt + 1
End If
End If
Next i
If Day(tDay) < 20 Then Exit For
Next J
If scCnt > 0 Then
Set OutApp = CreateObject("Outlook.Application")
Subj = "Scadenze del " & Format(tDay, "dd-mmm-yyy") '<<< OGGETTO DELLA MAIL
EmailAddr = "Destinatario@dominio.com" '<<< Il Destinatario
'
Set OutMail = OutApp.CreateItem(0) 'DA QUI SI CREA E INVIA LA MAIL
With OutMail
.To = EmailAddr
.CC = ""
.BCC = ""
.Subject = Subj
.Body = mySc
.Send
End With
' (c)
Application.Wait (Now + TimeValue("0:00:01"))
Set OutMail = Nothing
Set OutApp = Nothing
End If
End Sub
Per inserire il codice:
-premi Alt-F11 per aprire l'editor delle macro
-Menu /Inserisci /Modulo
-Copia il codice e incollalo nel frame dx del modulo appena creato
Personalizza le righe marcate <<< come da commento.
Poi torna su Excel e quando vuoi creare l'elenco delle scadenze in arrivo lancia la macro CkDDlines:
-premi Alt-F8
-seleziona CkDDlines dall'elenco di macro disponibili
-premi Esegui
Alternativamente puoi fare in modo che la CkDDlines venga lanciata automaticamente all'apertura del file; per questo inserirai nel modulo QuestaCartellaDiLavoro il codice:
- Codice: Seleziona tutto
Private Sub Workbook_Open()
Call CkDDlines
End Sub
Il file andra' salvato nel formato .xlsm (macro enabled).
Nella prima parte la macro scansiona il calendario per controllare se ci sono scadenze entro 5 gg; se ne vengono trovate viene inviata una email all'indirizzo specificato con un testo del tipo
Scadenze da segnalare:
gennaio 16, Scadenza 1
gennaio 17, Scadenza 2
Ciao