一覧表から,mailItemObj.Display を使って,メールを半自動で送信するVBAを作成してます。
ループのなかで,mailItemObj.Display を使うと,ループの数だけ,一度に送信のウィンドウが開いてしまいます。
これを,一つのウインドウの処理が終わったら次のウィンドウが開くようにするに,どうすればいいのでしょうか。
送信終了のイベントを検出するまで,ループさせて,終了後に次のウインドウが開くようにすれば良さそうですが,
実際にどうすればいいか解りません。
ご助言をお願いできればありがたいです。
No.1ベストアンサー
- 回答日時:
こんばんは、
.Displayメソッドには戻り値が無かったように記憶しています。
従って送信またはキャンセルされた時に次に進むような処理は難しいのではないでしょうか。
WindowsAPIなどでWindowを捕まえて、すべて非表示、、順番に表示するような事も出来るかも知れませんがどうでしょう?
コードがないので実際どのようなプロセスか分かりませんが、
考え方を変え、mailItemObj.Display ウィンドウでユーザーが行いたい事を
mailItemObj.Displayを使わずUserFormで表示して実行する事は、可能ではないかと思います。
例えば、
For i = 1 to 10
With objMail
.To = List(i) 不明の為 'メール宛先
.Subject = "メール件名" 'メール件名
.BodyFormat = olFormatplain 'メールの形式
.Body = "メール本文" 'メール本文
.Display
End With
のような場合、
UserForm1.Show
UserForm1 Moduleで
Private Sub UserForm_Initialize()
省略
For i = 1 to 10
ListBox1.AddItem = .AddressEntries(i).Address ? 不明の為 'メール宛先
Next
TextBox1 = "メール件名" 'メール件名
TextBox2 = "メール本文" 'メール本文
など確認操作したい項目を備える
End Sub
Private Sub CommandButton1_Click()
省略
With objMail
.To = ListBox1.Text 'メール宛先
.Subject = TextBox1.Value 'メール件名
.BodyFormat = olFormatplain 'メールの形式
.Body = TextBox2.Value 'メール本文
.Send
End With
End Sub
ご質問から離れてしまったので、この辺で
早速のご回答ありがとうございます。
VBAの初心者なので,とんちんかんなこと考えたのかも
しれません。
いろいろくぐってみると,
送信終了後に,
Application_ItemSend
のイベントが発生するとの記載がりました。
これ,OUTLOOKで発生するんですね。
このイベントをエクセルで検知できれば,
と考えてました。
あるいは,このイベントで,エクセルのセルに設定した
フラグ等の書き換えができれば,
Do While
等の無限ループで,
objMail.Dsplay
で一ずつ送信ウインドウを開けるかなと考えました。
こんなこと可能なんでしょうかね。
No.2
- 回答日時:
こんばんは、
エクセルから操作するのですね。
処理の流れとして
>ループのなかで,mailItemObj.Display を使う
としないのであれば、可能かもしれませんね。
Application_ItemSend で、mailItemObj.Displayから送信せずに閉じた場合、どのように対策しますか
どの様なプロセスを前提に考えられているか分かりませんが、少なくともループの中でmailItemObj.Display表示して
Do While等の無限ループで、イベントを待つのは、どうなんでしょう?(思ったら検証してみては?それが一番早いし理解できるかと)
すみません。いまは、検証する時間がないのでわかりませんが、普通?に考えると
前提として、送信イベント&キャンセルイベント、または、ウインドウが閉じるなど捕まえられるなら
トリガー >>メール作成 >> イベント >> Call メール作成 の様にするかな
Dim n As Long
sub trigger()
省略
To_Address= xxx
call MailAdd (To_Address)
sub MailAdd (To_Address As String)
省略
With objMail
.To = To_Address
省略
.Display ’イベント発生又はトリガーを得る
End With
Private Sub Outlook.Application_ItemSend(ByVal item As Object, Cancel As Boolean)
Dim To_Address As String 'このイベントこんな書き方で動いたか不明です。調べてください。
If cells(n+1,1) <>"" Then
To_Address=cells(n+1,1)
Call MailAdd (To_Address)
n=n+1
end if
適当になってしまいましたが、あくまで.Displayから挙動がつかめれば、
こんな感じで繰り返せば良いのでは?
へんな質問に丁寧にお答えいただいてありがとうございます。
自分の考えてコーデングしていて,全然うまくいかないので,
質問させていただきました。
とうも,大きな勘違いをしていたようで,
Application_ItemSendのイベントは,
エクセルでおきるものと思い込んでいました。
動く訳ないですよね。それでの質問でした。
それと,送信せずに閉じた場合,ウィンドウを閉じる時も
何らかのイベントが発生するのかなんて考えておりました。
この辺の考えは,PICの割り込みの種別で違った処理をする
ことが頭に残ってるからかと思います。
>Do While等の無限ループで、イベントを待つのは、どうなんでしょう?
これも,知り合いの方に良くいわれて,
あまりいい方法でないとよく言われました。
前回のご回答のように,UserFormで確認するのがベスト
かなと思います。
それと,Outlook.Application_ItemSend(ByVal item As Object, Cancel As Boolean)
な記述ができるんですね。これは,エクセル側で,イベントのハンドラーの記述ができると理解していいのでしょうか。
イベントのハンドラーはアウトルック側に書くのかなと
おぼろげながら思ってました。
とりあえず,MsgBox はさんで処理を一時中断することで
対処してみて,いろいろ試して,勉強しながら,
やっていこうと思います。
お忙しいのにご回答いただきありがとうございます。
前回のご回答をベストアンサーにさせていただきます。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# TCP/IP通信時のサーバーからの受信 2 2022/11/23 09:11
- Windows 10 windows10のクリーンインストールが完了出来ない 2 2022/06/04 13:33
- その他(Microsoft Office) VBA メール送信済で実行されるはずが、実行されない時があります。 2 2023/02/02 14:05
- Java Java 南京錠 2 2023/02/04 11:46
- Outlook(アウトルック) 「送信トレイに未送信のメッセージがあります。このまま終了すると、次にoutlookを起動するまでメッ 1 2023/02/24 15:13
- その他(コンピューター・テクノロジー) Ubuntu22.04ltsですが、たまにYou Tubeを聴いたり観たりしていると、無限ループでコ 2 2023/07/21 13:19
- Outlook(アウトルック) outlook メモリ不足 1 2022/05/31 10:16
- docomo(ドコモ) 通話録音が(最初から)自動的に始まるアプリは? 7 2023/01/16 15:53
- 書類選考・エントリーシート 前日バイトルで、ある求人にweb応募しました。 応募したらすぐに自動送信でコボットを使用して希望の面 2 2022/07/19 10:36
- 中途・キャリア 前日、バイトルである求人にweb応募しました。 応募したらすぐに自動送信でコボットを使用して希望の面 1 2022/07/18 22:12
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
AccessのDoCmd.SendObjectについて
-
メールアドレスの存在確認はで...
-
時間を指定してメール送信
-
VB.NETでフリーメールアドレス...
-
二重投稿防止方法
-
submitボタンのアラートを閉じ...
-
ブラウザの更新ボタン
-
ホームページのフォームから送...
-
メールの特定にphpを使っている...
-
受信メールの本文解析
-
PHPのif文でその処理を途中で抜...
-
onedrive にexcelファイルをア...
-
フォントの色を変えるには?
-
.phpと.incファイルの違いはな...
-
拡張子php画像をjpg画像等に変...
-
プリクラの設置してある場所
-
XMLのロードに失敗する
-
URLが.PHPってどういう...
-
透過PNGが透過されない!!
-
phpの処理中に画面表示ををする...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
ワードプレス、Contact Form 7...
-
VB6にてメールを送信する方法
-
存在しないメールアドレスかど...
-
コマンドプロンプトで添付ファ...
-
VBでメールを送る時のSMT...
-
問い合わせ完了ページでの二重...
-
送信日時を指定してメールを送...
-
一定時間毎に同じ動作を繰り返...
-
HPの更新をしたら自動でメール...
-
メールアドレスの存在確認はで...
-
$_SERVER{'HTTP_X_UP_SUBNO'}取...
-
mail関数を使うと遅いので
-
Bookを閉じて保存した時のみ実...
-
二重投稿防止方法
-
ブラウザの更新ボタン
-
mb_send_mail関数により送信さ...
-
javamailで220の応答が遅い
-
AccessのDoCmd.SendObjectについて
-
リファラが取得できない?
-
<HTML>~入る タグ が無いから ...
おすすめ情報