Access VBA programar envió de e.mail
Necesito enviar un informe cada hora, pero tiene que ser pasados 10 minutos de cada Hora, como puedo programar con VBA que me abra el informe me lo adjunte y me envíe el correo a y 10 de todas las horas.
1 Respuesta
En el formulario que sea, en vista diseño, en sus Propiedades-eventos, en Intervalo de cronómetro ponle 1000(son milisegundos, o sea que cada segundo te ejecutará) y en el evento Al cronómetro crea un procedimiento de evento y entre Private Su y End Sub escribe
if datepart("n",time())=10 then
DoCmd.SendObject acSendReport, "Alumnos", "PDFFormat(*.pdf)", , , , , , True
end if
Así, cuando abras el formulario, empezará a contar los segundos. Cuando llegue el momento en que los minutos de la hora del sistema sean igual a 10 te mandará el informe Alumnos. Lo de true es para que veas el correo electrónico con el informe. Te he puesto formato PDF pero tu ponle el formato que quieras, y donde hay varias comas seguidas van el email, cco, asunto, mensaje.
Hola.
Cojonudo, muchas gracias da gust, solo una duda, sólo me lo ejecuta una vez me he dado cuenta que tengo que cerrar y abrir el formulario de nuevo para que vuelva a ejecutarlo, sería la solución un refresh. O hay otra solución.
Muchas gracias
Hola.
otra cosa que me pasa es que si pongo 1000 (1segundo) me envía 60 correos pues cada segundo chequea que coincida el minuto y lógicamente coincide 60 veces, yo creo que con poner mas de 30 segundos se solucionaría pues solo le daría tiempo a chequear una vez por minuto.
He puesto esto en el if ---If DatePart("n", Time()) = 5 Or DatePart("n", Time()) = 6 Then y lo que me lo hace bien pues cuando llega a esos minutos me saca un msgbox (es parar probar) sin necesidad de abrir el formulario, yo creo que no me funcionaba porque con un if lo que hacia era probar cambiando el minuto y eso por lo visto requiere abrir y cerrar,
Una cosa más y si pongo que coincida la hora el minuto y el segundo con las 24 hora en los Gracias de veras, muchas gracias.
Sorry se me ha borrado algo lo que quería decir es que si pongo " if 00:10:00 or 01:10:00 or 02:10:00 así no me enviaría nada más que un correo pues nunca va a coincidir otra hora
¿Qué te parece?
:-)
Por partes
Primero he probado y cada vez que los minutos coinciden vuelve a mandar el mensaje. No hace falta cerrar y abrir el formulario, porque cada x segundos vuelve a consultar la hora del sistema.
Segundo. Con respecto a lo de los segundos tienes toda la razón. El problema estriba en que el formulario empieza a contar segundos cuando en el sistema son, por ejemplo, 17:09:40 y le pongo que cuente cada 60 sg, con esa hora sólo mandaría uno, a las 17:10:40, por tanto creo que lo mejor es poner, en el evento Al cronómetro
Dim respuesta As Integer
If DatePart("n", Time()) = 10 Then
respuesta = MsgBox("¿Quiere enviar el mensaje?", vbYesNo, "Aviso")
If respuesta = vbYes Then
'DoCmd.SendObject....
ElseIf respuesta = vbNo Then
Exit Sub
End If
End If
Y en Intervalo de cronómetro pon 59000
Claro que podrías hacerlo siempre y cuando "trabajes2 siempre a esas horas
If time()=09:10:00 or time()=10:10:00 or....
Ok muchas...
Voy a probar la 2 opción, poniendo las horas que quiero que me lo envíe.
Una última cosa, tiene que estar el formulario y la bbdd abiertos o hay alguna opción para que lo envíe aunque este cerrado.
Un saludo.
Fran.
Si lo pones por horas, en intervalo de cronometro ponle 1000, ya que tiene que calcular al segundo. Y acuérdate de poner las horas como #10:00:00#
Lógicamente tiene que estar abierta porque empieza a contar cuando se abre el formulario. Con la base cerrada no se ejecuta ningún código.
Pero puedes utilizar el Programador de Tareas, para que cada hora a partir de, por ejemplo, las 09:10:00 y cada hora, se abra la base de datos. Pero acuérdate de poner como formulario de Inicio el formulario que va a contar el tiempo y de ponerle en el código, al final Docmd. Quit para que cuente, envie y cierre. Al cabo de una hora, a las 10:10:00 aunque estés en otra aplicación, te abriría esa base.
Hola de nuevo.
Bueno simplemente es para agradecerte tu tiempo, me dejas acojonado de lo que controlas.
da gusto con gente así caguen la puta GRACIAS.
Hola.
Acabo de retomar la BBDD y te agradecería si es posible que me aclararas unas dudas que me han surgido al ponerla en funcionamiento ( que por cierto no va fina del todo, algo hice mal seguro)
El tema era que a y diez de cada hora me tenia que enviar un mail, pero ¿Qué pasaría si esta abierta en dos sitios a la vez, me enviaría dos correos?
si no es mucha molestia te importaría echarla un ojo a ver que te parece o donde esta el fallo ¿Cómo lo ves?
Gracias de antemano.
Lógicamente si esta abierta en varios sitios el formulario cuenta como independiente y te enviaría uno por formulario. Para evitarlo lo mejor es que tuvieras una tabla, por ejemplo, Envíos, con un campo Fecha, y en la instrucción poner
If dcount("fecha","envios","fecha=date()")>=1 then
exit sub
else
Dim respuesta As Integer
docmd.runsql"insert into envíos(fecha)values(date())"
If DatePart("n", Time()) = 10 Then
respuesta = MsgBox("¿Quiere enviar el mensaje?", vbYesNo, "Aviso")
If respuesta = vbYes Then
'DoCmd.SendObject....
ElseIf respuesta = vbNo Then
Exit Sub
End If
End If
end if
Así, antes de mandar nada, contará los registros que hay en la tabla Envíos que tengan fecha del sistema. Si hay al menos uno, quiere decir que ya se ha enviado el correo y por tanto no lo enviaría. Si al contar no hay ninguno con la fecha de hoy, primero lo guarda en la tabla envíos y después envía el correo.
Si quieres, envíame la base y la miro. Mi correo es [email protected]
Si lo haces, en el asunto del mensaje pon tu alias Frank de la Puentes, ya que si no sé quien me lo manda no los abro
- Compartir respuesta