Te mando mi solución: lo haremos mediante el evento change de la hoja en cuestión, es decir, siempre que se produzca algún cambio en la hoja evaluará las fechas de la columna D para ver si alguna es la fecha de hoy. Si fuera así ten enviará un correo al mail escrito dentro de la macro en su línea correspondiente:
Recuerda que esto es un evento por lo que no se copia en un módulo, se copia dentro del objeto hoja que estamos tratando.
Private Sub Worksheet_Change(ByVal Target As Range)
'por luismondelo
If Target.Column <> 4 Then
Range("d2").Select
Do While ActiveCell.Row <> 23
If ActiveCell.Value = Date Then
Set parte1 = CreateObject("outlook.application")
Set parte2 = parte1.createitem(olmailitem)
parte2.to = "[email protected]"
parte2.Subject = "escribir el asunto"
parte2.body = "cambia la fecha de la celda " & activecell.address
Parte2. Display 'en lugar de display poner send para enviar el correo sin verlo previamente
MsgBox "mensaje enviado, recuerda modificar las fechas de la columna D para que no se envien nuevos mensajes"
Exit Do
End If
ActiveCell.Offset(1, 0).Select
Loop
End If
Set parte1 = Nothing
Set parte2 = Nothing
End Sub
recuerda finalizar y puntuar