我在使用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
有没有办法对宏进行编码以确保电子邮件被推送?
答案 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
并将其关闭
在WINDOWS TASK SCHEDULER中设置任务
你能确认你的Windows操作系统吗? - Siddharth Rout 36分钟前
Windows XP。它是我的工作电脑(通常登录等)。 - keynesiancross 18分钟前
单击“开始”按钮|所有课程|配件|系统工具|安排任务以获取此窗口
双击“添加预定任务”以获取此窗口
单击“下一步”
单击“浏览”并选择我们之前创建的vbs文件,然后单击“打开”
您获得的下一个窗口至关重要,因为我们需要在脚本需要运行时提及
完成所需后,请点击下一步。
在此窗口中,输入您的登录详细信息,以便即使屏幕被锁定,脚本也可以运行。
完成后单击“下一步”,然后在下一个窗口中单击“完成”。您的任务计划程序现在看起来像这样
你已经完成了
锁定你的电脑然后休息喝咖啡;)当你回来时(取决于你在任务安排程序中设置的时间以及休息时间),电子邮件本来是发送。
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