• 👏 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
 

Alberto Ripol

New member
Hola Héctor,

Pues son ya 2-3 días y no ejecuta la macro:

- Puede ser que no la pusiera donde debía? Yo hago Alt+F11 y la pego en la misma hoja. Me comentaste que podía ser en otro lugar, pero donde?
- Puede ser que no haya conexión en la macro, con Outlook?

Saludos,
 

Héctor Miguel

Well-known member
Pues son ya 2-3 días y no ejecuta la macro:
- Puede ser que no la pusiera donde debía? Yo hago Alt+F11 y la pego en la misma hoja. Me comentaste que podía ser en otro lugar, pero donde?
lo siguiente lo copias > pegas (o escribes) en un modulo de codigo estandar:
- Puede ser que no haya conexión en la macro, con Outlook?
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 ?)
analiza lo que estes haciendo diferente de lo anotado previamente (?)
 

Alberto Ripol

New member
Hola Héctor, lo he pegado todo en un módulo de código estandar, tampoco hace nada.

Este es el código:

Dim siguiente As Date
Const tiempo As String = "09:00: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]", "POSICION DIARIA": .Close False: End With
End Sub
Sub detener(): On Error Resume Next
Application.OnTime EarliestTime:=siguiente, Procedure:="envioprogramado", Schedule:=False
End Sub


Seguro que algo sencillo debe estar fallando.

Por lo que he leído, en este módulo debería empezar con SUB, es así?

Gracias!
 

Héctor Miguel

Well-known member
lo he pegado todo en un módulo de código estandar, tampoco hace nada
recuerda esto:
la macro "por si sola"... no hace nada !, es necesario que la ejecutes:
{alt}+{F8} > seleccionas la macro "envioProgramado" > pulsas {aceptar}
esto es lo que yo he podido comprobar...

1) descargue tu modelo del mensaje # 7 (y SIN tocar nada y outlook cerrado...)

2) pulso {Alt}+{F8} > selecciono la macro (envioProgramado) > la ejecuto
- incluso estando el codigo en el modulo de "la hoja" (aunque esto es una "mala praxis")

que sucedio ?

3) se muestra un dialogo con el avance del proceso indicando (preguntando por parte de outlook)
- un programa intenta enviar correos en su nombre (autorizar | denegar | ...)
=> pulso en autorizar
fin del proceso

4) intento ejecutar de nuevo la macro "envioProgramado" y... nanais (el mensaje de un procedimiento en espera)
- esto confirma que el metodo OnTime se ha activado y esta programado el siguiente envio (segun la variable "siguiente")

5) abro outlook (recuerda que estaba cerrado) y que encuentro ?
- el correo que mando excel ya esta en la bandeja de salida (con todo y adjunto)

que, como, cuando, donde, ... estas haciendo diferente ?
 
Arriba