Ejecutar una macro con tareas programadas

Tengo una macro, la cual al abrirse el documento excel, se ejecuta. La programe mediante tareas programadas, se abriera el excel y se ejecutara la macro. El problema es que, la macro lo que hace es enviar email con alertas a distintas personas a las cuales se les ha cumplido una fecha de pago, por lo que se encuentran en atraso. Esta programada para que se ejecute automáticamente todo los lunes, el problema esta que de repente debo entrar a ver la planilla y se envía nuevamente los correo a las personas, lo que puede ser muy molesto para ellos ya que, si abro la planilla 2 veces en el día, seria 2 veces el mismo correo.

¿Existe alguna manera para que la macro solo se ejecute cuando se abre el excel por tarea programada pero no así cuando se abre el archivo de manera manual?

1 Respuesta

Respuesta
1

.05/10/16

Hola, Gustavo

Me parece que el modo de evitarlo es que la rutina que se ejecuta programadamente deje una marca de "enviado" asociada al registro correspondiente para esa persona y que, antes de cualquier envío, programado o no, controle si tiene esa marca o no. Es una solución.

La otra, más pedestre, es que presiones la tecla Shift (mayusculas) al abrir el archivo. Eso evita que se ejecuten las rutinas asociadas a la apertura.

.

.

Buenas, Gus

Acabo de ver tu repregunta como comentario, no como parte de este post.

Imagino que tenés una base donde están las personas que deben recibir el mail y que según algún control de fecha lo envía o no.

Algo asi como este ejemplo:

Entonces tu rutina de envío debería agregar una instrucción que coloque OK, por ejemplo, en aquellos casos donde el mail fue efectivamente enviado.

A su vez, la macro que dispara el envio debería revisar si para esa persona en la columna H dice Pend. Caso contrario, no envía el mail.

Suponiendo que tu procedimiento revisa la columna de fechas de ese listado, para decidir si manda o no el mail, la rutina sería:

... (comandos previos que tengas)
        For Cliente = 1 To Max(Range("A1:A10000"))
         If Range("A1").Offset(Cliente, 7).Value = "Pend" Then ' Controla que diga Pend en la columna H
            If Range("A1").Offset(Cliente, 6).Value <= Date Then ' Controla que la fecha prevista de envío sea igual o anterior a hoy
                Call <Tu Rutina de envio de mails>
                Range("A1").Offset(Cliente, 7).Value = "OK" ' cambia el status a enviado OK
            End If
        End If
        Next
...

Desde luego, podés tener estructurado el For/Next de otra manera pero creo que vas a entender.

Si no, preguntame de nuevo en esta parte del post.

Abrazo

Fer

.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas