• 👏 Bienvenido a nuestra comunidad Excel

    ¿Todavía no estás registrado? 😲

    Registrate gratis aquí y podrás:

    💪 Hacer preguntas a los expertos
    ⬇️ Descargar ejemplos y plantillas
    🏅 
    Acceder a contenidos premium

Envío de página a cierta hora por mail

Alberto Ripol

New member
Buenas tardes,

Necesitaría una macro para mandar una hoja en un archivo de Excel.

Pero lo que querría es lo siguiente:

- Una vez el archivo está abierto, que automáticamente de lunes a viernes y a las 07:50 mande una sola hoja (HOJA15 - NOMBRE) por mail a cierto correo y con Outlook.

¿ES POSIBLE?

Muchas gracias!


Alberto,
 

Guillermo Hm

Active member
Buenas tardes,

Necesitaría una macro para mandar una hoja en un archivo de Excel.

Pero lo que querría es lo siguiente:

- Una vez el archivo está abierto, que automáticamente de lunes a viernes y a las 07:50 mande una sola hoja (HOJA15 - NOMBRE) por mail a cierto correo y con Outlook.

¿ES POSIBLE?

Muchas gracias!


Alberto,
Cordial saludo

Puedes probar con esta macro:

Sub MacroHora()

Application.OnTime TimeValue("19:50:00"), "enviar_mail"

End Sub
Sub enviar_mail()
'Aqui pega el procedimiento que has publicado en los otros temas del foro...
End sub


PDT: Vi que en las respuestas que te han dado indicaron el uso de "Application.OnTime", investiga sobre esto, hay montón de información en la web...

Saludos
 

Alberto Ripol

New member
Hola Guillermo, gracias por tu respuesta y ayuda.

Antes de indicarte lo que sale para poder avanzar, repito lo del otro foro, NO TENGO NI PAJOLERA IDEA DE VBA NI MACROS... y por eso las respuestas obtenidas en el otro foro son humo.

Esto es lo que sale:



Sub MacroHora()

Application.OnTime TimeValue("16:33:00"), "enviar_mail"

End Sub


Sub enviar_mail()

Sub Enviar_Correo_Hoja15()

On Error Resume Next

ActiveWorkbook.Sheets(1).Copy

With ActiveWorkbook

.SendMail Recipients:="[email protected]", Subject:="SITUACIÓN DIARIA"

.Close SaveChanges:=False

End With

End Sub



Voy bien?
 

Guillermo Hm

Active member
Hola Guillermo, gracias por tu respuesta y ayuda.

Antes de indicarte lo que sale para poder avanzar, repito lo del otro foro, NO TENGO NI PAJOLERA IDEA DE VBA NI MACROS... y por eso las respuestas obtenidas en el otro foro son humo.

Esto es lo que sale:



Sub MacroHora()

Application.OnTime TimeValue("16:33:00"), "enviar_mail"

End Sub


Sub enviar_mail()

Sub Enviar_Correo_Hoja15()

On Error Resume Next

ActiveWorkbook.Sheets(1).Copy

With ActiveWorkbook

.SendMail Recipients:="[email protected]", Subject:="SITUACIÓN DIARIA"

.Close SaveChanges:=False

End With

End Sub



Voy bien?
Quita esto :

Sub Enviar_Correo_Hoja15()

o sube el archivo con lo que tienes...
 

Héctor Miguel

Well-known member
NO TENGO NI PAJOLERA IDEA DE VBA NI MACROS... y por eso las respuestas obtenidas en el otro foro son humo
en la otra consulta dices que excel puede estar en ejecucion (permanente ?), de lo contrario, la siguiente programacion de envio pudiera no ejecutarse

el detalle es que outlook tambien debe estar en ejecucion (permanente), de lo contrario, el correo solo "llega" a la bandeja de salida (esperando outlook en ejecucion)

por cierto, el metodo ".SendMail" utiliza el cliente de correos instalado en el sistema (debera ser outlook configurado con cuenta y todo)

y falta ver como vas a "lidiar" con la configuracion de seguridad de outlook (p.ej. cuando otra aplicacion pretende usar sus servicios ?)

dicho lo anterior, lo siguiente lo copias > pegas (o escribes) en un modulo de codigo estandar:
Código:
Dim siguiente As Date
Const tiempo As String = "16:50:00"
Sub envioProgramado()
  If (Date + TimeValue(tiempo)) < siguiente Then CreateObject("wscript.shell").PopUp _
    "Hay un procedimiento programado en espera de ejecucion !", 3, "Espera !": Exit Sub
  enviaMail
  siguiente = Date + 1 - 3 * (Weekday(Date, 2) = 5) + TimeValue(tiempo)
  Application.OnTime EarliestTime:=siguiente, Procedure:="envioprogramado", Schedule:=True
End Sub
Sub enviaMail()
  ThisWorkbook.Worksheets(1).Copy
  With ActiveWorkbook: .SendMail "[email protected]", "Situación diaria": .Close False: End With
End Sub
Sub detener(): On Error Resume Next
  Application.OnTime EarliestTime:=siguiente, Procedure:="envioprogramado", Schedule:=False
End Sub

el procedimiento "envioProgramado" lo ejecutas solo una vez (entre lunes y viernes), los demas quedaran programados a cada 24 hrs. (excepto sab/dom)
OJO: si hay un evento programado pendiente de ejecucion, no te permite enviar un "nuevo mail programado", pero...
el procedimiento "enviaMail" lo deje "libre" (por si necesitas enviar alguno "fuera de programa" ?)

el ultimo procedimiento (detener) es para cuando quieras/necesites suspender la progrmacion de envios automatizados (hasta la siguiente ocasion ?)
(p.ej. lo puedes llamar en el evento '_beforeclose' de tu libro (por si lo llegas a cerrar ?) de lo contrario...
si excel esta en ejecucion (y ese libro cerrado) y "te pesca" un evento programado, el libro se vuelve a abrir y se ejecuta el envio/OnTime
 

Alberto Ripol

New member
Hola Héctor, muchas gracias, tiene buena pinta.

Excel sí puede estar abierto y Outlook también.

De hecho en el archivo original ya hay otras funciones que mandan, muy de vez en cuando, un correo, también con outlook, pero no coinciden en el tiempo. Por eso entiendo que Outlook ya está bien configurado.

Lo he probado (TE ADJUNTO ARCHIVO), y no hace nada. Lo he pegado clicando Alt + F11 y en la página que quiero que mande. Es correcto?

No me ha parecido ver en el código nada de Outlook, puede ser?

Saludos!
 

Adjuntos

Héctor Miguel

Well-known member
Lo he probado... y no hace nada
la macro "por si sola"... no hace nada !, es necesario que la ejecutes:
{alt}+{F8} > seleccionas la macro "envioProgramado" > pulsas {aceptar}
Lo he pegado clicando Alt + F11 y en la página que quiero que mande. Es correcto?
no es recomendable que la pongas en el modulo de la misma hoja que copias para enviar (el libro que mandas tambien lleva su modulo vba)
No me ha parecido ver en el código nada de Outlook, puede ser?
tampoco hay necesidad de "mencionar" nada de outlook para el metodo ".SendMail"
tal como te lo comentaba previamente...
por cierto, el metodo ".SendMail" utiliza el cliente de correos instalado en el sistema
 
Arriba