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

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

4

3 回答 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 文件,C:\Tester.Xlsm就像您使用的是 Excel 2007 及更高版本一样,或者C:\Tester.Xls您使用的是 Excel 2003 并退出


准备 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 分钟前

视窗XP。它是我的工作计算机(通常的登录名等)。– keynesiancross 18 分钟前

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

在此处输入图像描述

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

在此处输入图像描述

点击下一步

在此处输入图像描述

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

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

在此处输入图像描述

完成所需的操作后,单击下一步。

在此处输入图像描述

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

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

在此处输入图像描述

你完成了


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

高温高压

于 2012-04-18T15:32:44.413 回答
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>
于 2013-11-15T02:28:43.023 回答
0

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

于 2012-04-18T14:35:35.003 回答