[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『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 >
割り込み失礼します。
予約したときにの「時刻」と中止命令に使った「時刻」が不一致だからです。 同一のものを指定する必要があります。 モジュールレベル変数を使って、 予約時刻を保持しておき、これを中止するときにも使えばよいのです。 つまり、以下のようにするとよいでしょう。
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
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
Yさん
すいません
おっしゃる通り手打ちでしていたもので、入力ミスとアンダースコアの使い方が間違っていたためできなかったみたいです。
おかげで、思うように動かすことが出来ました。
今回は皆さんありがとうございました。
また、ご教授頂くかもしれませんが、その時はよろしくお願い致します。
(さき) 2019/05/31(金) 10:19
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.