Excel VBA - 计算机锁定时不发送电子邮件

时间:2012-04-18 14:13:31

标签: email vba excel-vba outlook scheduled-tasks

我在使用Excel VBA发送Outlook电子邮件时遇到问题。我有代码 - Sendupdate - 当我手动运行宏时,它可以正常工作。我的第二个宏StartTimer旨在当我不在我的办公桌时,在设定的时间执行上述内容。

但是,当计算机被锁定时,电子邮件不会发送。当我回到我的办公桌时,电子邮件挂在那里作为草稿,我需要点击send按钮。

这是我的代码:

Sub SendUpdate()
Recipient = "x@y.com"
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

有没有办法对宏进行编码以确保电子邮件被推送?

3 个答案:

答案 0 :(得分:19)

我将分三步打破这个“教程”

1)编写Excel宏

2)准备vbscript文件

3)在Windows任务计划程序中设置任务


撰写EXCEL MACRO


在Excel中打开一个新文件,在模块中粘贴此代码

Option Explicit

Const strTo As String = "abc@abc.com"
Const strCC As String = "def@abc.com"  '<~~ change "def@abc.com" to "" if you do not want to CC
Const strBCC As String = "ghi@abc.com" '<~~ change "ghi@abc.com" 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

如果您使用的是Excel 2007,则将Excel文件另存为C:\Tester.Xlsm;如果您使用的是Excel 2003并退出

,请将C:\Tester.Xls另存为

准备VBSCRIPT文件


打开记事本,然后粘贴此代码。如果适用,请更改扩展名“.xls”。

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

将文件另存为Tester.vbs并将其关闭

enter image description here


在WINDOWS TASK SCHEDULER中设置任务


  
    
      

你能确认你的Windows操作系统吗? - Siddharth Rout 36分钟前

             

Windows XP。它是我的工作电脑(通常登录等)。 - keynesiancross 18分钟前

    
  

单击“开始”按钮|所有课程|配件|系统工具|安排任务以获取此窗口

enter image description here

双击“添加预定任务”以获取此窗口

enter image description here

单击“下一步”

enter image description here

单击“浏览”并选择我们之前创建的vbs文件,然后单击“打开”

您获得的下一个窗口至关重要,因为我们需要在脚本需要运行时提及

enter image description here

完成所需后,请点击下一步。

enter image description here

在此窗口中,输入您的登录详细信息,以便即使屏幕被锁定,脚本也可以运行。

完成后单击“下一步”,然后在下一个窗口中单击“完成”。您的任务计划程序现在看起来像这样

enter image description here

你已经完成了


锁定你的电脑然后休息喝咖啡;)当你回来时(取决于你在任务安排程序中设置的时间以及休息时间),电子邮件本来是发送。

HTH

答案 1 :(得分:1)

我使用HTML和JavaScript setInterval运行vba代码来克服这个问题。 代码:

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

答案 2 :(得分:0)

SendKeys可能是罪魁祸首。我仍然使用CDO通过Excel VBA发送电子邮件。这应该让你开始:http://www.rondebruin.nl/cdo.htm