Enviar un correo electrónico cuando se alcanza una fecha límite (Microsoft Excel)
Domenic tiene una hoja de trabajo que muestra las fechas de vencimiento de los proyectos en la columna E.
Sabe que puede usar el formato condicional para mostrar cuándo se alcanza la fecha de vencimiento (cuando es la misma que la fecha de hoy), pero lo que realmente necesita es que se le envíe un correo electrónico cuando se alcance la fecha de vencimiento. Se pregunta si hay alguna forma de hacer esto en Excel.
En realidad, hay una manera de hacer esto, siempre que no le importe usar una macro. Además, deberá enviar el correo electrónico a través de Outlook, con el que VBA se comunicará perfectamente. (Desafortunadamente, VBA no se puede usar fácilmente para conectarse con otros clientes de correo).
Aquí, por ejemplo, hay una macro que se ejecutará cada vez que se abra su libro. Verifica automáticamente cada fila en una hoja de trabajo, específicamente ingresando dos cosas: la fecha de vencimiento en la columna E y un «valor de marca» en la columna F. (Este valor de marca lo establece la macro. Si la columna F contiene la letra «S, «entonces la macro asume que se ha enviado un correo electrónico previamente.)
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
Cuando se ejecuta la macro (de nuevo, cuando se abre el libro por primera vez), comprueba cada fila de la hoja de trabajo para ver si hay una «S» en la columna F.
De lo contrario, verifica si la fecha en la columna E es igual a la fecha de hoy. Si es así, el código crea un mensaje de correo electrónico (que puede modificar, según desee) para enviarlo. Se muestra el correo electrónico y puede hacer clic en el botón Enviar después de realizar los cambios que desee.
En ese momento, la hoja de trabajo se actualiza colocando el indicador «S» en la columna F y la fecha en que se envió el correo electrónico en la columna G.
Tenga en cuenta que la macro asume que el nombre del proyecto está en la columna B.
Esta información se utiliza para armar el mensaje que se enviará por correo electrónico.
_Nota: _
Si desea saber cómo usar las macros descritas en esta página (o en cualquier otra página de los sitios ExcelTips), he preparado una página especial que incluye información útil.
link: / excelribbon-ExcelTipsMacros [Haga clic aquí para abrir esa página especial en una nueva pestaña del navegador]
.
ExcelTips es su fuente de formación rentable en Microsoft Excel.
Este consejo (474) se aplica a Microsoft Excel 2007, 2010, 2013 y 2016.