【问题标题】:How to Send Email When Computer is Locked?计算机被锁定时如何发送电子邮件?
【发布时间】:2012-04-29 23:23:03
【问题描述】:

我想使用 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",因为当你的系统被锁定时它不会工作。
  • 嗨,悉达多,感谢您的反馈。如果你不介意,我想看看你如何做到这一点的例子。非常感谢!
  • 好的,我需要至少 30 分钟来编写它,测试它,然后用截图上传到这里 :)
  • 你能确认你的windows操作系统吗?
  • Windows XP。它是我的工作计算机(所以有通常的登录等)。

标签: excel vba email outlook scheduled-tasks


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    我将分 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。它是我的工作计算机(通常的登录名等)。 – 18 分钟前的凯恩斯十字路口

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

    双击“添加计划任务”得到这个窗口

    点击下一步

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

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

    完成需要后,点击下一步。

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

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

    你已经完成了


    锁上你的电脑,去喝杯咖啡休息一下;)当你回来时(取决于你在任务计划程序中设置的时间以及你的休息时间),电子邮件会已发送。

    HTH

    【讨论】:

    • 这很棒,会试一试。再次感谢 - 非常感谢。
    • 不是我有问题,而是你在几秒钟内选择了我的答案:) 你至少应该自己测试一下;)
    • +1 还要确保任务计划程序服务正在运行。 (默认开启,但系统管理员通常通过组策略将其关闭)
    • @Pradeep Kumar:是的。非常真实。
    • 顺便说一句,如果添加 Windows 7 任务计划程序的屏幕截图会帮助社区吗?界面与XP有很大不同。 :p
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 2016-10-12
      • 1970-01-01
      • 2019-02-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多