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.