Вопрос по email, outlook, excel-vba, vba, scheduled-tasks – Excel VBA - электронная почта не отправляется, когда компьютер заблокирован

12

У меня проблемы с отправкой электронных писем с помощью Excel VBA. У меня есть код, чтобы сделать это -Sendupdate - и он отлично работает, когда я вручную запускаю макрос. Мой второй макросStartTimer предназначен для выполнения вышеуказанного в установленное время, когда я не нахожусь за своим столом.

Однако, когда компьютер заблокирован, электронное письмо не отправляется. Когда я возвращаюсь к своему столу, электронная почта висит там как черновик, и мне нужно нажать наsend кнопка.

Вот мой код:

<code>Sub SendUpdate()
Recipient = "[email protected]"
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
</code>

Есть ли способ кодирования макроса, чтобы убедиться, что электронная почта отправляется?

Не могли бы вы подтвердить свою операционную систему Windows? Siddharth Rout
Привет Сиддхарт, спасибо за ваш отзыв. если вы не возражаете, я хотел бы увидеть пример того, как вы это делаете. большое спасибо! keynesiancross
Для таких операций я никогда не использую Excel. Я использую планировщик заданий Windows и файл VBScript для отправки электронной почты из Excel. Если вы заинтересованы, то я могу показать вам пример. И определенно нетApplication.SendKeys "%s" так как он не будет работать, когда ваша система заблокирована. Siddharth Rout
Хорошо, мне нужно, по крайней мере, 30 минут, чтобы написать это, протестировать и загрузить сюда со скриншотами :) Siddharth Rout
о, спасибо большое! keynesiancross

Ваш Ответ

3   ответа
18

1) Написание вашего Excel макроса

2) Подготовка вашего файла VBScript

3) Настройка задачи в Windows Task Scheduler

WRITING THE EXCEL MACRO

Откройте новый файл в Excel и в модуле вставьте этот код

Option Explicit

Const strTo As String = "[email protected]"
Const strCC As String = "[email protected]"  '<~~ change "[email protected]" to "" if you do not want to CC
Const strBCC As String = "[email protected]" '<~~ change "[email protected]" 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 и выход

PREPARING THE VBSCRIPT FILE

Откройте Блокнот и вставьте этот код. Изменить расширение & quot; .xls & quot; применимо.

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

SETTING UP THE TASK IN WINDOWS TASK SCHEDULER

Could you confirm your windows operating system? – Siddharth Rout 36 mins ago

Windows XP. Its my work computer (so has the usual logins etc). – keynesiancross 18 mins ago

Нажмите на кнопку Пуск | Все программы | Аксессуары | Системные инструменты | Расписание задач, чтобы получить это окно

enter image description here

Дважды щелкните & quot; Добавить запланированное задание & quot; чтобы получить это окно

enter image description here

Нажмите кнопку "Далее

enter image description here

Нажмите & quot; Просмотреть & quot; и выберите файл VBS, который мы создали ранее, и нажмите & quot; открыть & quot;

Следующее окно, которое вы получите, имеет решающее значение, так как именно здесь мы должны упомянуть, когда необходимо запустить скрипт

enter image description here

После того, как вы сделали все необходимое, нажмите «Далее».

enter image description here

В этом окне введите свои данные для входа, чтобы скрипт мог работать, даже если ваш экран заблокирован.

Нажмите & quot; Далее & quot; когда закончите, а затем нажмите «Готово» в следующем окне. Ваш планировщик задач теперь выглядит так

enter image description here

И вы сделали

Заблокируйте свой компьютер и идите на перерыв на кофе;) Когда вы вернетесь (depending on what time you set in the task scheduler and how much time is your break), электронное письмо было бы отправлено.

НТН

хорошо :) Если у вас возникнут проблемы, пишите обратно.
+1 Также убедитесь, что служба Task Scheduler запущена. (он включен по умолчанию, но системные администраторы обычно отключают его с помощью групповой политики)
Это здорово, попробую. Еще раз спасибо - высоко ценится. keynesiancross
Не то чтобы у меня была проблема, но вы выбрали мой ответ всего за несколько секунд :) Вы должны были хотя бы проверить его сами;)
хаха, у меня есть вера keynesiancross
0

вероятно, виновник. Я все еще использую CDO для отправки писем через Excel VBA. Это должно помочь вам начать:http://www.rondebruin.nl/cdo.htm

1

чтобы преодолеть такую проблему. Код:

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

Похожие вопросы