[[20190530170722]] 『ON TIME のマクロを使ったメールの送信を設定した』(さき) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『ON TIME のマクロを使ったメールの送信を設定したいのですがどうすればいいかわかりません。』(さき)

いつも参考にさせて頂いております。

今回、エクセルでメールを送信予約として、チェックボタンにチェックをすれば5分後にメールが自動で送信でき、キャンセルする時はチェックを外すということができるマクロ組みたいとON TIME を使えばできるかと思ってマクロを組みました。しかし、メールだけはすぐに起動するのですが、肝心の5分後に送信することができません。

現在、このような形で、標準モジュールに入れています。
ちなみに、メール送信1のマクロはサイトにあったものをコピーしている状態です。

Option Explicit
Sub 自動送信1()

    Application.OnTime , _
    EarliestTime:=Now + TimeValue("00:05:00"), _
    Procedure:="メール送信1"
End Sub

Sub メール送信1() '
'---コード1|outlookを起動する

    Dim toaddress, ccaddress, bccaddress As String  '変数設定:To宛先、cc宛先、bcc宛先
    Dim subject, mailBody, credit As String '変数設定:件名、メール本文、クレジット、添付
    Dim outlookObj As Outlook.Application    'Outlookで使用するオブジェクト生成
    Dim mailItemObj As Outlook.MailItem      'Outlookで使用するオブジェクト生成
'---コード2|差出人、本文、署名を取得する---
    toaddress = Range("AV6").Value   'To宛先
    ccaddress = Range("メール!I3").Value   'cc宛先
    bccaddress = Range("メール!I4").Value  'bcc宛先
    subject = Range("メール!I5").Value     '件名
    mailBody = Range("メール!I6").Value    'メール本文
    credit = Range("メール!I7").Value      'クレジット

'---コード3|メールを作成して、差出人、本文、署名を入れ込む---

    Set outlookObj = CreateObject("Outlook.Application")
    Set mailItemObj = outlookObj.CreateItem(olMailItem)
    mailItemObj.BodyFormat = 3      'リッチテキストに変更
    mailItemObj.To = toaddress      'to宛先をセット
    mailItemObj.CC = ccaddress      'cc宛先をセット
    mailItemObj.BCC = bccaddress    'bcc宛先をセット
    mailItemObj.subject = subject   '件名をセット
'---コード4|メール本文を改行する
    mailItemObj.Body = mailBody & vbCrLf & vbCrLf & credit   'メール本文 改行 改行 クレジット
'---コード5|自動で添付ファイルを付ける---
    Dim attached As String
    Dim myattachments As Outlook.Attachments 'Outlookで使用するオブジェクト生成
    Set myattachments = mailItemObj.Attachments
    attached = Range("メール!I9").Value     '添付ファイル
'---コード6|メールを送信する---
    'mailItemObj.Save   '下書き保存
    mailItemObj.Display  'メール表示(ここでは誤送信を防ぐために表示だけにして、メール送信はしない)
'---コード7|outlookを閉じる(オブジェクトの解放)---
    Set outlookObj = Nothing
    Set mailItemObj = Nothing

End Sub

Sub 中止()

    Application.OnTime EarliestTime:=Now + TimeValue("00:05:00"), _
      Procedure:="メール送信1", Schedule:=False

End Sub

これをチェックボックスにマクロ登録すれば起動すると思ったのですが、すぐにメールが起動してしまい、うまくできません。
なぜ、起動しないのかとそもそものマクロ自体が間違っているのかわからない状態です。
大変申し訳ありませんが、ご指導の程よろしくお願い致します。

< 使用 Excel:Excel2013、使用 OS:Windows8 >


最初は「自動送信1」を起動するようですが、間違えて「メール送信1」を登録してたりしませんか?
(???) 2019/05/30(木) 17:45

回答して頂きありがとうございます。
ご指摘の通り、自動送信1を登録していなかったので、自動送信1をしてはみたんですが、今度はコンパイルエラーとして引数は省略できないという表示がでて、上手く出来ませんでした。
(さき) 2019/05/30(木) 18:05

あー、それは「自動送信1」のコードで、Application.OnTime の直後に余分なカンマが入っているせいですね。 「中止」の方には入れてないのに。
(???) 2019/05/30(木) 18:11

ご指摘通り直したところ上手くいきました。
動かないことに原因がわからずかなり困っていたので本当にありがとうございました。
(さき) 2019/05/30(木) 18:38

何度も申し訳ありません。
新たに問題が出てしまいました。
先ほど、5分後にはメールが起動することができたんですが、途中で中止することができないことがわかり困っています。
中止のマクロが実行時エラーで、'OnTime'メソッドは失敗しました:'_Application'オブジェクトが出てしまいます。
どのようにすれば、途中で中止することができるでしょうか?
(さき) 2019/05/30(木) 23:18

 割り込み失礼します。

 予約したときにの「時刻」と中止命令に使った「時刻」が不一致だからです。
 同一のものを指定する必要があります。
 モジュールレベル変数を使って、
 予約時刻を保持しておき、これを中止するときにも使えばよいのです。
 つまり、以下のようにするとよいでしょう。

 Option Explicit
 Dim myTime As Date      '変数宣言の位置に注意
 Sub 自動送信1()
     myTime = Now + TimeValue("00:05:00")
     Application.OnTime _
         EarliestTime:=myTime, _
         Procedure:="メール送信1"
 End Sub
 Sub 中止()
     Application.OnTime EarliestTime:=myTime, _
         Procedure:="メール送信1", Schedule:=False
 End Sub

 なお、上記のコードでは、
 予約していないものを中止したときには、エラーになる
 ことに注意してください。 
 それも気になるなら、
     On Error Resume Next
     Application.OnTime EarliestTime:=myTime, _
         Procedure:="メール送信1", Schedule:=False
 などとするとよいと思います。
(γ) 2019/05/31(金) 08:56

質問の回答をして頂きありがとうございます。
Sub 自動送信1()
        myTime=Now+TimeValue(“00:05:00”)
        Application.OnTime _
               EarliestTime:=myTime, _
               Procedure:=“メール送信1”
End Sub

の「EarliestTime:=myTime, _」がコンパイルエラーで修正候補:式と出てるのですが、
これはどういうことなのでしょうか?
(さき) 2019/05/31(金) 09:33


 横から失礼します。

 >    Application.OnTime EarliestTime:=myTime, _
         Procedure:="メール送信1", Schedule:=False

 ↓にしたらどうなりますか?

    Application.OnTime EarliestTime:=myTime,  Procedure:="メール送信1", Schedule:=False
(カリーニン) 2019/05/31(金) 09:42

 参考HPです。

http://plus1excel.web.fc2.com/learning/l301/t810.html
(カリーニン) 2019/05/31(金) 09:44


文字列引用符が全角文字になっているところからすると、手打ちされているようです。
なにかしらのミスが混入しているものと思います。
私はテスト実行して正常動作を確認してから提示しております。
もう一度確認して貰えますか?

(γ) 2019/05/31(金) 09:57


カリーニンさん
回答ありがとうございます。
参考HPありがとうございます。
アンダースコアの使い方を間違えていました。

Yさん
すいません
おっしゃる通り手打ちでしていたもので、入力ミスとアンダースコアの使い方が間違っていたためできなかったみたいです。
おかげで、思うように動かすことが出来ました。

今回は皆さんありがとうございました。
また、ご教授頂くかもしれませんが、その時はよろしくお願い致します。
(さき) 2019/05/31(金) 10:19


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.