2012-04-18 16 views
12

Mam problemy z wysyłaniem wiadomości e-mail programu Outlook za pomocą programu Excel VBA. Mam kod, aby to zrobić - Sendupdate - i działa poprawnie, gdy ręcznie uruchomić makro. Moje drugie makro StartTimer jest przeznaczone do wykonania powyższego w określonym czasie, gdy nie jestem przy moim biurku.Excel VBA - wiadomość e-mail nie jest wysyłana, gdy komputer jest zablokowany

Jednak, gdy komputer jest zablokowany, wiadomość e-mail nie jest wysyłana. Kiedy wracam do swojego biurka, e-mail wisi tam jako szkic, i muszę kliknąć przycisk send.

Oto mój kod:

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 

Czy istnieje sposób, aby kod makra aby upewnić się, że adres e-mail zostanie wciśnięty?

+0

Dla tego rodzaju operacji nigdy nie używam programu Excel. Używam programu Windows Task Scheduler i pliku vbscript, aby wysłać wiadomość e-mail z programu Excel. Jeśli jesteś zainteresowany, mogę pokazać ci przykład. I zdecydowanie nie "Application.SendKeys"% s "', ponieważ nie będzie działać, gdy system jest zablokowany. –

+0

Witam Siddharth, dziękuję za twoją opinię. jeśli nie masz nic przeciwko, chciałbym zobaczyć przykład, jak to robisz. wielkie dzięki! – keynesiancross

+0

ok, potrzebuję conajmniej 30 minut, aby go napisać, przetestować, a następnie załadować tutaj z zrzutami ekranu :) –

Odpowiedz

18

złamię tę "Tutorial" w 3 krokach

1) pisanie Excel Macro

2) Przygotowanie pliku VBScript

3) Ustawienie zadania Windows Task Scheduler


pisanie EXCEL MAKRO


otworzyć nowy plik w Excelu oraz w module, wklej ten kod

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 

Zapisz Excel, jak plik C:\Tester.Xlsm jeśli używasz programu Excel 2007 r lub C:\Tester.Xls jeśli używasz programu Excel 2003 i exit


PRZYGOTOWANIE VBScript PLIK


Otwórz Notatnik, a następnie wklej ten kod. Zmień rozszerzenie ".xls" odpowiednio.

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 

zapisz plik jako Tester.vbs i zamknąć to

enter image description here


konfigurowania zadania w systemie Windows Task Scheduler


Czy możesz potwierdzić swój system operacyjny Windows? - Siddharth Rout 36 min temu

Windows XP. Jest to mój komputer roboczy (ma więc zwykle loginy itp.).- keynesiancross 18 minut temu

kliknąć na przycisk Start | Wszystkie programy | Akcesoria | Narzędzia systemowe | Zadania planu, aby uzyskać to okno

enter image description here

podwójne kliknięcie na "Dodaj zaplanowane zadanie", aby dostać to okno

enter image description here

Kliknij Dalej

enter image description here

Kliknij " Przeglądaj "i wybierz plik vbs, który stworzyliśmy wcześniej, i kliknij o n „otworzyć”

następnym oknie, które masz jest niezwykle ważne, ponieważ to tutaj musimy wspomnieć kiedy skrypt musi uruchomić

enter image description here

Po wykonaniu co konieczne, kliknąć na następny.

enter image description here

W tym oknie, wprowadzić swoje dane logowania tak, że skrypt może działać nawet wtedy, gdy ekran jest zablokowany.

Po zakończeniu kliknij "Dalej", a następnie kliknij "Zakończ" w następnym oknie. Twój harmonogram zadań teraz wygląda to

enter image description here

i gotowe


Blokowanie komputera i iść zrobić przerwę na kawę;) Po powrocie (zależności od tego czasu można ustawić w harmonogramie zadań i ile czasu upłynie Twoja przerwa:), wiadomość e-mail zostałaby wysłana.

HTH

+0

To jest świetne, da mu szansę.Jeszcze raz dziękuję - docenione. – keynesiancross

+0

Nie to, że mam problem, ale wybrałeś moją odpowiedź w kilka sekund :) Powinieneś przynajmniej przetestować to sam;) –

+0

haha, mam wiarę – keynesiancross

1

użyłem kodu HTML i JavaScript setInterval do uruchomienia kodu VBA w celu przezwyciężenia tego problemu. Kod:

<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> 
Powiązane problemy