2012-04-18 15 views
12

estoy teniendo problemas para enviar mensajes de correo electrónico Outlook utilizando Excel VBA. Tengo el código para hacerlo - Sendupdate - y funciona bien cuando manualmente ejecuto la macro. Mi segunda macro StartTimer está destinada a ejecutar lo anterior a una hora determinada cuando no estoy en mi escritorio.Excel VBA - email no Enviar Cuando el equipo está bloqueado

Sin embargo, cuando el equipo está bloqueado el correo electrónico no envía. Cuando vuelvo a mi escritorio, el correo electrónico cuelga allí como borrador, y necesito hacer clic en el botón send.

Aquí es mi código:

Sub SendUpdate() 
Recipient = "[email protected]" 
Subj = "update" 
Dim msg As String 
msg = "hello” 

HLink = "mailto:" & Recipient & "?" 
HLink = HLink & "subject=" & Subj & "&" 
HLink = HLink & "body=" & msg 
ActiveWorkbook.FollowHyperlink (HLink) 
    Application.Wait (Now + TimeValue("0:00:01")) 
    Application.SendKeys "%s" 
End Sub 

Sub StartTimer() 
Application.OnTime TimeValue("18:00:00"), "SendUpdate" 

End Sub 

¿Hay una manera de codificar la macro para asegurarse de que el correo electrónico es empujado? es probable

+0

Para este tipo de operaciones, nunca utilizo Excel. Uso el Programador de tareas de Windows y un archivo vbscript para enviar el correo electrónico desde Excel. Si estás interesado, entonces puedo mostrarte un ejemplo. Y definitivamente no 'Application.SendKeys"% s "', ya que no funcionará cuando su sistema esté bloqueado. –

+0

Hola Siddharth, gracias por tu comentario. si no te importa, me gustaría ver un ejemplo de cómo lo haces. ¡muchas gracias! – keynesiancross

+0

bien, necesito al menos 30 minutos para escribirlo, probarlo y luego subirlo aquí con capturas de pantalla :) –

Respuesta

18

voy a romper este "tutorial" en 3 pasos

1) Escribir su macro de Excel

2) Preparación del archivo de VBScript

3) Configuración de la tarea en el programador de tareas de Windows


ESCRITURA dE LA MACRO EXCEL


abrir un nuevo archivo en Excel y en el módulo, pega este código

Option Explicit 

Const strTo As String = "[email protected]" 
Const strCC As String = "[email protected]" '<~~ change "[email protected]" to "" if you do not want to CC 
Const strBCC As String = "[email protected]" '<~~ change "[email protected]" to "" if you do not want to BCC 

Sub Sample() 
    Dim OutApp As Object, OutMail As Object 
    Dim strbody As String, strSubject As String 

    strSubject = "Hello World" 
    strbody = "This is the message for the body" 

    Set OutApp = CreateObject("Outlook.Application") 

    Set OutMail = OutApp.CreateItem(0) 

    On Error Resume Next 
    With OutMail 
     .To = strTo 
     .CC = strCC 
     .BCC = strBCC 
     .Subject = "This is the Subject line" 
     .Body = strbody 
     .Send 
    End With 
    On Error GoTo 0 

    Set OutMail = Nothing 
    Set OutApp = Nothing 
End Sub 

Guarde el archivo de Excel como C:\Tester.Xlsm si está utilizando Excel 2007 en adelante o C:\Tester.Xls si está utilizando Excel 2003 y salida


Preparación del archivo VBSCRIPT


Abrir el Bloc de notas y pegue este código. Cambie la extensión ".xls" según corresponda.

Dim xlApp 
Dim xlBook 

Set xlApp = CreateObject("Excel.Application") 
Set xlBook = xlApp.Workbooks.Open("C:\Tester.xls", 0, True) 
xlApp.Run "Sample" 
xlBook.Close 
xlApp.Quit 

Set xlBook = Nothing 
Set xlApp = Nothing 

guardar el archivo como Tester.vbs y cerrar

enter image description here


CONFIGURACIÓN DEL tareas en Windows Task Scheduler


Podría confirmar sistema operativo de las ventanas? Hace Siddharth Rout 36 minutos

Windows XP -. Es mi computadora de trabajo (por lo que tiene los inicios de sesión habituales, etc.).- keynesiancross 18 mins ago

Haga clic en el botón de inicio | Todos los programas | Accesorios | Herramientas del sistema | Agenda de tareas para obtener esta ventana

enter image description here

doble clic en "Agregar tarea programada" para conseguir esta ventana

enter image description here

Haga clic en Siguiente

enter image description here

Haga clic en " Examine "y seleccione el archivo vbs que creamos anteriormente y haga clic en o n "abrir"

La siguiente ventana que se obtiene es crucial, ya que es aquí tenemos que mencionar cuando script necesita para funcionar

enter image description here

Después de haber hecho lo necesario, haga clic en siguiente.

enter image description here

En esta ventana, introduzca sus datos de acceso para que el script se puede ejecutar incluso cuando la pantalla está bloqueada.

Haga clic en "Siguiente" cuando termine y luego haga clic en "Finalizar" en la siguiente ventana. Su programador de tareas ahora se ve así

enter image description here

y ya está


Bloquear el equipo para empezar a tomar un café;) Cuando vuelvas (dependiendo de la hora de configurar en el planificador de tareas y cuánto tiempo es su descanso), el correo electrónico se habría enviado.

HTH

+0

Esto es genial, le dará una oportunidad.Gracias de nuevo, muy apreciado. – keynesiancross

+0

No es que tenga un problema, pero seleccionó mi respuesta en unos pocos segundos :) Al menos debería haberlo probado;) –

+0

jaja, tengo fe – keynesiancross

1

que utiliza HTML y JavaScript setInterval para ejecutar código VBA para superar tal problema. Código:

<html> 
<script> 

var flag = false; 
var xlApp; 
var xlBook; 
var i = 0; 

function processExcel() 
{ 
//Open the excel containing macro for the first time 
if(flag==false) 
{ 
    xlApp = new ActiveXObject ("Excel.Application"); 
//Your Excel containing VBA code 
    xlBook=xlApp.Workbooks.Open("Count1.2.xlsm") 

} 
// "a" is the VBA macro 
xlApp.Run("a"); 

flag=true; 


i++; 
window.status="Last Updated " + new Date(); 


} 

var w 
function run() 
{ 

processExcel(); 

w= setInterval("processExcel()",120000); 


} 
function stop() 
{ 

clearInterval(w); 


} 

</script> 

<body > 

<input type="button" value="Start" onclick="run()" /> 
<input type="button" value="Stop" onclick="stop()"/> 


</body> 
</html> 
Cuestiones relacionadas