一覧表から,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も見ています
-
性格の違いは生まれた順番で決まる?長男長女・中間子・末っ子・一人っ子の性格の傾向
同じ環境で生まれ育っても、生まれ順で性格は違うものなのだろうか。家庭教育研究家の田宮由美さんに教えてもらった。
-
VBAでブックを非表示で開いて処理して閉じる方法
Excel(エクセル)
-
アウトルックが起動しているかどうかを取得するには?
Visual Basic(VBA)
-
VBAのフォント変更(エクセルからoutlookのメール作成において)
Visual Basic(VBA)
-
-
4
VBAでOutlookを終了させたい ExcelVBAで既に起動されているOutlookを終了させる
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
存在しないメールアドレスかど...
-
受信メールの本文解析
-
コマンドプロンプトで添付ファ...
-
powerbuilderのメール機能について
-
AccessのDBシステムからの自...
-
SendMailがエラーを返さない
-
VB.NETでフリーメールアドレス...
-
PHPを使ってリレーサーバー...
-
onedrive にexcelファイルをア...
-
バッチを用いたフォルダの自動移動
-
フォントの色を変えるには?
-
PHPのif文でその処理を途中で抜...
-
VBSの「MsgBox」について
-
別ファイルの変数を呼び出した...
-
MIB取得について
-
Subversionのリポジトリの削除
-
さくらサーバーにて、phpからメ...
-
phpinfo.phpを開くとファイルの...
-
$_SESSION 有効期限をブラウザ...
-
csvファイルの読込みとソート
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
VB6にてメールを送信する方法
-
存在しないメールアドレスかど...
-
AccessのDoCmd.SendObjectについて
-
VBでメールを送る時のSMT...
-
phpのmb_send_mailが迷惑メール...
-
Bookを閉じて保存した時のみ実...
-
コマンドプロンプトで添付ファ...
-
メールアドレスの存在確認はで...
-
Windowsサーバーでメール送信プ...
-
submitボタンの二重送信について
-
ループの中で mailItemObj.Disp...
-
powerbuilderのメール機能について
-
空メールの作り方教えて欲しい...
-
MAPI コンポーネントを使ったメ...
-
【エクセルVBA】メール送信前に...
-
★エクセルVBAでOutlookのメール...
-
SMTPサーバの指定なしでメ...
-
phpでメールを送信
-
メールアドレスを追加して、他...
-
【PHPでメルマガ配信したい!】...
おすすめ情報