Invio di un’e-mail quando viene raggiunta una data di scadenza (Microsoft Excel)
Domenic ha un foglio di lavoro che mostra le date di scadenza dei progetti nella colonna E.
Sa di poter utilizzare la formattazione condizionale per mostrare quando viene raggiunta la data di scadenza (quando è la stessa della data odierna), ma ciò di cui ha veramente bisogno è un’e-mail da inviare quando viene raggiunta la data di scadenza. Si chiede se esiste un modo per farlo in Excel.
In realtà, c’è un modo per farlo, a condizione che non ti dispiaccia usare una macro. Inoltre, dovrai inviare l’e-mail tramite Outlook, con cui VBA comunicherà perfettamente. (Sfortunatamente, VBA non può essere facilmente utilizzato per connettersi con altri client di posta.)
Ecco, ad esempio, una macro che verrà eseguita ogni volta che viene aperta la cartella di lavoro. Controlla automaticamente ogni riga in un foglio di lavoro, specificando due cose: la data di scadenza nella colonna E e un “valore di flag” nella colonna F. (Questo valore di flag è impostato dalla macro. Se la colonna F contiene la lettera “S, “allora la macro presume che sia stata precedentemente inviata una e-mail.)
Private Sub Workbook_Open() Dim OutApp As Object Dim OutMail As Object Dim lLastRow As Long Dim lRow As Long Dim sSendTo As String Dim sSendCC As String Dim sSendBCC As String Dim sSubject As String Dim sTemp As String Set OutApp = CreateObject("Outlook.Application") OutApp.Session.Logon ' Change the following as needed sSendTo = "[email protected]" sSendCC = "" sSendBCC = "" sSubject = "Due date reached" lLastRow = Cells(Rows.Count, 3).End(xlUp).Row For lRow = 2 To lLastRow If Cells(lRow, 6) <> "S" Then If Cells(lRow, 5) <= Date Then Set OutMail = OutApp.CreateItem(0) On Error Resume Next With OutMail .To = sSendTo If sSendCC > "" Then .CC = sSendCC If sSendBCC > "" Then .BCC = sSendBCC .Subject = sSubject sTemp = "Hello!" & vbCrLf & vbCrLf sTemp = sTemp & "The due date has been reached " sTemp = sTemp & "for this project:" & vbCrLf & vbCrLf ' Assumes project name is in column B sTemp = sTemp & " " & Cells(lRow,2) sTemp = sTemp & "Please take the appropriate" sTemp = sTemp & "action." & vbCrLf & vbCrLf sTemp = sTemp & "Thank you!" & vbCrLf .Body = sTemp ' Change the following to .Send if you want to ' send the message without reviewing first .Display End With Set OutMail = Nothing Cells(lRow, 6) = "S" Cells(lRow, 7) = "E-mail sent on: " & Now() End If End If Next lRow Set OutApp = Nothing End Sub
Quando la macro viene eseguita (di nuovo, quando la cartella di lavoro viene aperta per la prima volta), controlla ogni riga del foglio di lavoro per vedere se c’è una “S” nella colonna F.
In caso contrario, verifica se la data nella colonna E è uguale alla data odierna. Se lo è, il codice mette insieme un messaggio di posta elettronica (che puoi modificare, se lo desideri) da inviare. Viene visualizzato il messaggio di posta elettronica ed è possibile fare clic sul pulsante Invia dopo aver apportato le modifiche desiderate.
A quel punto il foglio di lavoro viene aggiornato inserendo l’indicatore “S” nella colonna F e la data di invio dell’e-mail nella colonna G.
Notare che la macro presuppone che il nome del progetto sia nella colonna B.
Queste informazioni vengono utilizzate per mettere insieme il messaggio che verrà inviato tramite posta elettronica.
_Nota: _
Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.
ExcelTips è la tua fonte di formazione economica su Microsoft Excel.
Questo suggerimento (474) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.