次は、受信したメールに対して処理を行いたい、そんな流れだと思います。。。
MailItem オブジェクト
http://msdn.microsoft.com/ja-jp/library/cc359390.aspx
↑MSDNを参考にして、
|
←をそのまま実行すると、セキュリティのエラーがでるし・・・(涙) ↓実行結果の動画 http://www.youtube.com/watch?v=utXGuzkJ27M ↑三流解説 [え〜と] And [こんな感じ] の音声付き(笑) ↓エラーの画像 ↑ここで、1分や2分・・を選択するとうまくデータを取ることができます・・・ |
ウォッチで変数の中身を確認(オブジェクトが階層になってます)
イミディエイト ウインドウで ? 変数名で、実際の中身を確認しながら、イメージをつかむ
サンプル実行結果(一部です)
/* * 3.サンプル */ Excel97 VBA からOutLook97データを読んでみました。 test4が完成版です。 *Access や VBでも、結果の書き込み部分だけ変更すれば、 動作すると思います。 '----- ここから 'TEST()は、Access,VBでも、動作すると思う。 Sub TEST() 'Outlook にアクセスして、フォルダー名?をMsgboxで表示 'テストバージョン Dim olAPP As Object Dim olNameSPC As Object Dim nFCNT As Integer Set olAPP = CreateObject("Outlook.Application") Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト 'MsgBox olNameSPC.Folders.Count For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count MsgBox olNameSPC.Folders(1).Folders(nFCNT).Name Next nFCNT End Sub Sub TEST2() LookOutLookMSG ("受信トレイ") '↑半角で打ってください、 End Sub 'フォルダー名を受け取り、メッセージを表示、、デバック中? 'これも、Access,VBでも、動作すると思う。 Sub LookOutLookMSG(strFNAME As String) Dim olAPP As Object Dim olNameSPC As Object Dim objItem As Object Dim dteCreateDate As Date Dim strSubject As String Dim strItemType As String Dim strBody As String Dim intCounter As Integer Dim strOKNG As String Dim strMSG As String Dim nFCNT As Integer Set olAPP = CreateObject("Outlook.Application") Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト 'MsgBox olNameSPC.Folders.Count strOKNG = "NG" For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count If olNameSPC.Folders(1).Folders(nFCNT).Name = strFNAME Then strOKNG = "OK" Exit For '見つかったので抜ける End If Next nFCNT If strOKNG = "NG" Then MsgBox strFNAME & "フォルダーは、見つかりませんでした" Exit Sub End If For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items intCounter = intCounter + 1 With objItem dteCreateDate = .CreationTime strSubject = .Subject strItemType = TypeName(objItem) strBody = .Body End With strMSG = vbTab & "アイテム番号" & intCounter & " - " _ & strItemType & " - 作成日 " _ & Format(dteCreateDate, "yyyy/mm/dd hh:mm am/pm") _ & vbCrLf & vbTab & vbTab & "件名 : '" _ & strSubject & "'" & vbCrLf _ & strBody If MsgBox(strMSG, vbOKCancel) = vbCancel Then Exit For End If Next objItem End Sub Sub test3() Dim strInName As String strInName = InputBox("名称を入れてください") LookOutLookMSG (strInName) End Sub 'TEST4()は、ワークシート系のプロパティ、、 'を使っているので、Excelだけで、動作します。。チョット改造してください。 Sub test4() Dim olAPP As Object Dim olNameSPC As Object Dim objItem As Object Dim dteCreateDate As Date Dim strSubject As String Dim strItemType As String Dim strBody As String Dim intCounter As Integer Dim strMSG As String Dim nFCNT As Integer Dim nYLINE As Integer Workbooks.Add '新規ブックを作成する Set olAPP = CreateObject("Outlook.Application") Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト nYLINE = 1 For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count 'フォルダーの名称を書き込む Cells(nYLINE, 1) = olNameSPC.Folders(1).Folders(nFCNT).Name nYLINE = nYLINE + 1 '見出しを書き込む Cells(nYLINE, 1) = "No." Cells(nYLINE, 2) = "タイプ" Cells(nYLINE, 3) = "作成日" Cells(nYLINE, 4) = "件名" Cells(nYLINE, 5) = "内容" nYLINE = nYLINE + 1 'メッセージ数分ループ For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items intCounter = intCounter + 1 '変数に代入(セルに直接でもいいかも?) With objItem dteCreateDate = .CreationTime strSubject = .Subject strItemType = TypeName(objItem) strBody = .Body End With 'セルに代入 Cells(nYLINE, 1) = intCounter Cells(nYLINE, 2) = strItemType Cells(nYLINE, 3) = dteCreateDate Cells(nYLINE, 4) = strSubject Cells(nYLINE, 5) = strBody 'セット位置を移動 nYLINE = nYLINE + 1 Next objItem nYLINE = nYLINE + 1 Next nFCNT '楽して、Excelの自動サイズ調整を使用する Columns("A:E").EntireColumn.AutoFit Range("A1").Select End Sub '----- ここまで /* * 4.サンプル解説 */ 簡単に、解説します。 ア.オブジェクト"Outlook.Application"? 前回、VBAからExcelを操作したときと同様に、 Set olAPP = CreateObject("Outlook.Application") で、オブジェクトを参照できるようにします。 なんで、 Outlook.Application なの? そんなのExcelVBAヘルプに載ってないよ。 えっと、MSDN(マイクロソフトデベロッパーネットワーク) のCDで、Outlookで検索したら、載ってました。 じゃ、それないと、わからないの? ですね、、、今回のも、そこに載ってたサンプルを少し改造したものです。 * Outlook Express の設定方法、わからなかったので、 ご存知の方は、教えてください。 Set olNameSPC = olAPP.GetNamespace("MAPI") ' Namespace オブジェクト で、メッセージのオブジェクトを作って、 (サンプルそのまんまジャン) For nFCNT = 1 To olNameSPC.Folders(1).Folders.Count MsgBox olNameSPC.Folders(1).Folders(nFCNT).Name Next nFCNT テストなので、メッセージボックスで、フォルダー名を表示してます。 イ.メッセージの参照方法 オブジェクトフォルダーの中に、メッセージが入っています。 それを、 For Each objItem In olNameSPC.Folders(1).Folders(nFCNT).Items のループで1件、1件、取り出してます。 実際の参照は、 With objItem dteCreateDate = .CreationTime strSubject = .Subject strItemType = TypeName(objItem) strBody = .Body End With で、作成日・件名・タイプ・内容 を変数に取り出してます。 ウ.なんで、オブジェクトの構造が? テメエはなんで、オブジェクトの構造が?ヘルプに載ってないのに、 わかるんだ?ほんとは、どっかに載ってんだろ、 隠さないで、教えな。 だから、MSDNからです、サンプルを修正しただけって行ってるジャン。 もし、調べたり、イメージ・構想が知りたかったら、 デバックモードでとめて、 ウォッチで変数名を指定して、中身を見るか、 イミディエイトウインドウで? 変数名で表示してみるとか、、 やってみてください。 なんとなく、わかったような、かわされたような、、、 枠外解説・グチ --- 知識じゃなくて、調べ方が知りたい? もう、いろいろなソフトやOSがここまで、大きくなってくると、 全てをオボエル?のは、不可能です(だと、おもいます) Accessのフィールドのプロパティぐらいは、 なんとか全部知ってるけど(←うそです、見栄はってます) 次から次と、ソフト、出てくるし、バージョンアップするし、、、 単語の意味を知ってるのも、大事ですが、 辞書の引き方、調べ方の効率の良い方法を知りたいなぁ と最近思います。 正直、MSDNも、いっぱい情報あって、うまい引き方がわからないです。 (今回、Outlook Express の方法が探せなかった) う〜ん、、、長くなりそうなので、この話題も、機会があったら、続きを、、、 /* * 5.積み残し、残作業項目(食い残し) */ 食後のイップク、、、と行きたいところですが、 まだまだ、食べ残しがあります。 ア.Outlook Express Outlook Express のオブジェクトの作り方、 構造がわからなかった。。 イ.階層が深いとき 受信トレイにメールマガジン・個人関係・仕事関係・その他 など、トレイの下にフォルダーを作成して、 メールを管理している場合、対応していない ウ.質問はAccessのリンクだったでしょ 質問内容、読み返すと、 Accessのリンクテーブルを作成して、 リンクにして?直接参照したい みたいなこと書いてあったけど、 私のやり方だと、データを取り出す?ぐらいはできそうだけど、、 エ.将来の自分のために 送り主のメールアドレスを調べて、そのメールだけをAccessに インポート。 または、ルールを付けて、件名に、「発注」が入っていたらなど。 *また、一言いい? いいですよなんでも? Outlookのメール仕分け機能で、 このアドレスだったら/この件名だったら、発注フォルダーに移動、 って、やって、1つにまとめて、 テメエが作った、メッセージ取りだしサンプルを改造すれば、 できるんじゃないの、、自分で全部やらなくてもさ、、 /* * 6.終わりの挨拶 */ 今回、なんとなく?わかりましたか? あまり、噛み砕いてないので、消化しにくいですが、 サンプルを実行して、処理を見ながら、1つ1つ食べてみてください。 オブジェクト参照で、いろいろ、面白そうな処理、できそうですね。 もっとオブジェクトやメソッドを研究すると、 登録されているアドレス帳を調べてメールを送る、、 なんて、悪い処理も作れそうですね。。 めずらしい食べ物(要望・質問) や 調理方法(処理方法?)、味付けの方法(小技・テクニック?) あったら、気軽に掲示板に。 *素人さんからのメール、料理の鉄人さんからのメール待ってます。 では、また。 かぜぎみで調子の悪い三流PGのKen3でした。 *テメエが調子悪いのは、いつもだろ、、、 今日は、もう、かんべんしてね。。。 (ヒマな人は、下のワク外通信も見てください)
質問や要望など連絡方法でお互い確認が取りやすく、便利なのが掲示板なのですが、私の対応のまずさから不定期で荒れてしまい、掲示板は現在封鎖中です。(反省しなきゃ)
感想や質問・要望・苦情など 三流君へメッセージを送る。 時間的余裕のある要望・質問・苦情の場合は、下記のフォームからメッセージを送ることができます。 |
←パソコンの技術系の書籍を探しているなら コンピュータ関連の出版社33社(アスキー、インプレス等)が共同運営するコンピュータの本・専門店 ※種類が豊富で探し易い※在庫ありが48時間以内発送 |