当电脑被锁定时如何发送电子邮件?

12

我希望使用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

有没有方法确保电子邮件被推送?


对于这种操作,我从不使用Excel。我使用Windows任务计划程序和一个vbscript文件从Excel发送电子邮件。如果您有兴趣,我可以给您展示一个例子。绝对不要使用Application.SendKeys“%s”,因为当您的系统被锁定时它无法工作。 - Siddharth Rout
嗨,Siddharth,感谢您的反馈。如果您不介意,我想看一下您是如何做到的示例。非常感谢! - keynesiancross
好的,我需要至少30分钟来编写、测试并附带截图上传到这里 :) - Siddharth Rout
你能确认一下你的Windows操作系统吗? - Siddharth Rout
Windows XP。这是我的工作电脑(因此具有通常的登录等)。 - keynesiancross
显示剩余2条评论
3个回答

20

我将把这个“教程”分成3个步骤:

1)编写你的Excel宏

2)准备你的VBScript文件

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


编写Excel宏


在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,然后关闭它。

图片描述


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


请确认您的Windows操作系统。-Siddharth Rout 36分钟前

Windows XP。这是我的工作电脑(因此具有通常的登录等信息)。 - keynesiancross 18分钟前

单击"开始"按钮|所有程序|附件|系统工具|计划任务以获取此窗口

图片描述

双击“添加计划任务”以获取此窗口

图片描述

单击下一步

图片描述

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

接下来得到的窗口非常重要,因为我们需要在其中提到脚本需要运行的时间

图片描述

完成必要的操作后,单击下一步。

图片描述

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

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

图片描述

这就完成了


锁定您的PC并去喝杯咖啡 ;)当您回来时(取决于您在任务计划程序中设置的时间和休息时间长短),电子邮件已经发送。

希望对您有所帮助


1
请确保任务计划程序服务正在运行。 (+1) (默认情况下它是开启的,但系统管理员通常会通过组策略将其关闭) - Pradeep Kumar
顺便说一句,如果能添加Windows 7任务计划程序的屏幕截图,这将有助于社区。界面与XP非常不同。 :p - L42
@L42:当然,我会尝试并稍后完成它 :) 或者如果你愿意,你也可以帮我完成它 :) - Siddharth Rout
@SiddharthRout 尽管我很想,但似乎无法使用i-stack链接获取图像。 :) - L42
@mehow:感谢您抽出时间来欣赏它 :) - Siddharth Rout
显示剩余2条评论

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>

0

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接