Enviar email excel segun condicion

Como puedo hacer que me pueda enviar mensajes automáticos según la la aproximación de la fecha de la columna QUE pero con un intervalo de 20 días antes de la fecha, 15 días antes de la fecha y 11 días antes de la fecha que ese sea el rango en el que se envíe un email de notificación el cual deberá llevar en el asunto del mensaje los datos de las columna A (trabajo), C (cliente) y J (Orden de compra)

He creado esta macro y no funciona:

Sub Mandar_Mail()Dim Fila As IntegerDim OutMail As ObjectDim OutApp As ObjectDim StrBody As StringDim StrBody1 As StringDim StrBody2 As StringWorksheets("PM Scheduler").SelectSet OutApp = CreateObject("Outlook.Application")StrBody = "Señor," & vbCrLf & vbCrLfStrBody1 = "Sinceramente" & vbCrLf & vbCrLfStrBody2 = "Nombre remitente"  ' Nombre del remitente    u = Range("K" & Rows.Count).End(xlUp).Row    For i = 3 To u    If Cells(i, 11).Value <= Date - 20 And Cells(i, 11).Value <= Date - 15 And Cells(i, 11).Value <= Date - 11 ThenSet OutMail = OutApp.CreateItem(0)With OutMail  .To = "[email protected]"  .Subject = Worksheets("Hoja1").Range("A" & i) & Worksheets("Hoja1").Range("C" & i) & Worksheets("Hoja1").Range("J" & i)  .Body = StrBody & vbCrLf & vbCrLf & StrBody1 & StrBody2  .SendEnd WithEnd IfNext FilaSet OutMail = NothingSet OutApp = NothingEnd Sub
Respuesta
2

Antes de crear la macro, ayúdame a entender lo que necesitas:

1. Tienes esto en tu macro:

    If Cells(i, 11).Value <= Date - 20 And _
       Cells(i, 11).Value <= Date - 15 And _
       Cells(i, 11).Value <= Date - 11 Then

Cualquier fecha menor a 20 días, también es menor a 15 y también es menor a 11, te pongo un ejemplo:

Hoy estamos a 16 de junio,

20 días antes es 27 de mayo,

15 días antes es 1 de junio

11 días antes es 5 de junio

Entonces, si tienes en la celda 5 de junio o menor a 5 de junio, se va a enviar el correo, puede ser 4jun, 3jun, 2jun, 1jun, 31may, 3abr, etc, todas esas fechas son menores a 5 de junio.

Es por eso que no entiendo cuáles fechas son las que necesitas enviar, ya que con poner -11 todas se cumplen.

2. En tu macro tienes Next Fila, pero la macro la iniciaste con For i, entonces la Fila está de más, ¿o le estás dando otro uso a la variable Fila?

3. En esta parte de la macro tienes el asungo:

Worksheets("Hoja1").Range("A" & i) & Worksheets("Hoja1").Range("C" & i) & Worksheets("Hoja1"). Range("J" & i)

Pero debes seleccionar los datos, supongo que de la misma hoja "PM Scheduler"

Puede ser así:

        Set h = Sheets("PM Scheduler")
        With OutMail
            .To = "[email protected]"
            .Subject = h.Range("A" & i) & h.Range("C" & i) & h.Range("J" & i)
            .Body = StrBody & vbCrLf & vbCrLf & StrBody1 & StrBody2
            .Send
        End With

Hay que hacer varios cambios en la macro.

Pero para hacerlos necesito que me expliques lo de las fechas con ejemplos reales de fechas.

Si es lo que necesitas.

Hola dante, tus observaciones son buenas:

1. La macro debe buscar en la columna QUE desde la fila 3 en adelante, las fechas que cumplan con tres criterios únicos:

  • Si la encuentra una fecha que sea igual a 20 días antes, enviar email
  • si es igual a 15 días antes, enviar un email
  • si es 11 días antes, enviar email
  • If Cells(i, 11).Value = Date - 20 And _       Cells(i, 11).Value = Date - 15 And _       Cells(i, 11).Value = Date - 11 Then

2. Tienes razon, deberia de ir Next i

3. El cuerpo debe quedar como tu porposicion.

4. Viendo mejor, la macro debería de hacer esto:

Si la fecha que encuentra es igual a 20 dias antes, enviar email, solo que el cuerpo debe cambiar a "Le faltan 20 dias para pagar la deuda"

Si la fecha que encuentra es igual a 15 dias antes, enviar email, solo que el cuerpo debe cambiar a "Le faltan 15 dias para pagar la deuda"

Si la fecha que encuentra es igual a 11 dias antes, enviar email, solo que el cuerpo debe cambiar a "Le faltan 11 dias para pagar la deuda"

Hola dante;

Hagamos algo, olvidate de la macro que te envíe, y ayúdame con una nueva. Que la macro recorra la columna QUE desde la fila 3, y que cuando encuentre la condición de date = 20 días antes, envíe un email con el valor de las celdas A, C, y J, lo mismo haría cuando encuentre la condición de date = 15 y date = 11.

Gracias Maestro

Entonces quedaría así:

De 20 ó más días "Le faltan 20 días para pagar la deuda"

De 15 a 19 días "Le faltan 15 días para pagar la deuda"

De 11 a 14 días "Le faltan 11 días para pagar la deuda"

Ah, y para entender cómo quieres lo de las fechas, escribe los ejemplos:

Yo puse estos, pero necesito que me pongas tus ejemplos para entender lo que necesitas.

Hoy estamos a 16 de junio,

20 días antes es 27 de mayo,

15 días antes es 1 de junio

11 días antes es 5 de junio

¿

?

Entendido Dante:

Digamos que en la columna QUE hay esta fecha "05/07/2015"

20 días antes, seria 16/06/2015, y hoy se enviaría el email con todas las celdas (A, C y J) de esa fecha

15 días antes, es 21 de junio, enviar email con todas las celdas (A, C y J) de esa fecha

11 días antes, es 25 de junio, enviar email con todas las celdas (A, C y J) de esa fecha.

Te envío una imagen para que te guíes

Te anexo la macro

Sub EnviarCorreo()
'Por.Dante Amor
    Set h = Worksheets("PM Scheduler")
    For i = 3 To Range("K" & Rows.Count).End(xlUp).Row
        n = 0
        If h.Cells(i, "K") >= Date + 11 And h.Cells(i, "K") <= Date + 14 Then n = 11
        If h.Cells(i, "K") >= Date + 15 And h.Cells(i, "K") <= Date + 19 Then n = 15
        If h.Cells(i, "K") >= Date + 20 Then n = 20
        '
        If n > 0 Then
            Set dam = CreateObject("outlook.application").CreateItem(0)
            dam.To = "[email protected]"    'Destinatarios
            dam.Subject = h.Range("A" & i) & " " & h.Range("C" & i) & " " & h.Range("J" & i)                                         '"Asunto"
            dam.Body = "Le faltan " & n & " días para pagar la deuda."
            dam.Display
        End If
    Next
End Sub

Saludos.Dante Amor

Recuerda valorar la respuesta.

Cambia en la macro esto:

Dam. Display

Por esto:

Dam. Send

Recuerda valorar.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas