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.