12

ExcelVBAを使用してOutlookの電子メールを送信したい。

コードSendupdateは手動で実行すると機能します。

2番目のマクロ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で新しいファイルを開き、モジュールにこのコードを貼り付けます

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

C:\Tester.XlsmExcel 2007以降を使用している場合、またはC:\Tester.XlsExcel 2003を使用している場合と同様に、Excelファイルを保存して終了します。


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オペレーティングシステムを確認できますか?– SiddharthRout36分前

WindowsXP。その私の仕事用コンピュータ(通常のログインなどもあります)。–keynesiancross18分前

スタートボタンをクリック| すべてのプログラム| アクセサリー| システムツール| このウィンドウを取得するためのタスクのスケジュール

ここに画像の説明を入力してください

このウィンドウを表示するには、[スケジュールされたタスクの追加]をダブルクリックします

ここに画像の説明を入力してください

[次へ]をクリックします

ここに画像の説明を入力してください

「参照」をクリックして、前に作成したvbsファイルを選択し、「開く」をクリックします。

次のウィンドウは非常に重要です。スクリプトを実行する必要がある場合は、ここで説明する必要があります。

ここに画像の説明を入力してください

必要な作業を終えたら、[次へ]をクリックします。

ここに画像の説明を入力してください

このウィンドウで、画面がロックされている場合でもスクリプトを実行できるように、ログインの詳細を入力します。

完了したら「次へ」をクリックし、次のウィンドウで「完了」をクリックします。タスクスケジューラは次のようになります

ここに画像の説明を入力してください

そして、あなたは完了です


PCをロックして、休憩を取りに行きます;)戻ってきたとき(タスクスケジューラで設定した時間と休憩時間によって異なります)、電子メールが送信されます。

HTH

于 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を使用してExcelVBA経由でメールを送信しています。これで始められるはずです: http ://www.rondebruin.nl/cdo.htm

于 2012-04-18T14:35:35.003 に答える