どうも、三流プログラマーのKen3です。 今回は、 VBA から Outlook の受信トレイを探り、 メールアイテムのフラグを変更してみたいと思います。/* * 1. 今回のキッカケ */
掲示板にいただいた質問 --- >三流君VBAでOutlookを操作するの >No.161 Outlook VBAでフラグ作成は非常にためになりました。 >私の場合は新規作成メールにフラグをつけるのではなく >すでに受信しているメールに「実施済み」という意味合いでフラグを付けたい >のですが、可能でしょうか >よろしくお願いいたします。 --- と質問をもらった。 No.161 Outlook VBAでフラグ作成 .FlagStatus .FlagRequest .FlagDueBy http://www.ken3.org/vba/backno/vba161.html で行った方法は、新規に作成するメールに対してだったので一直線だったからなぁ。。 受信済みのメールを選択して、フラグを付けたいのね・・・/* * 2.受信トレイの選択 .Foldersを探る */
フラグを付けるメールを選びたいよね。 とその前に、受信トレイとか送信トレイ、下書きなどのフォルダーの選択かぁ・・・ Excel VBA からOutLookデータを読む http://www.ken3.org/guchi/backno/guchi022.html ↑愚痴系のNo.22 ナツカシイ・・ と過去の自分を参考にすると(Googleで探したら本人忘れてた自分のサイトを発見(笑)) .Foldersってオブジェクトで探れそうです。 フォルダー名をテストで表示させて見ました。
Sub aaa()
'Outlookを開き、フォルダー名をメッセージボックスでテスト表示
Dim objOL As Object 'OutLookのアプリケーションオブジェクト
Dim objNAMESPC As Object '名前空間
Dim n As Integer 'カウンター
'アプリケーションのオブジェクトを新規作成
Set objOL = CreateObject("Outlook.Application")
'Namespace オブジェクト作成
Set objNAMESPC = objOL.GetNamespace("MAPI")
'フォルダーの数を表示する
MsgBox "親のフォルダー数は" & objNAMESPC.Folders.Count
'フォルダーの下、第二階層でループさせる
For n = 1 To objNAMESPC.Folders(1).Folders.Count
'1番目のさらに下、n番目のフォルダー名を表示する
MsgBox objNAMESPC.Folders(1).Folders(n).Name
Debug.Print objNAMESPC.Folders(1).Folders(n).Name
Next n
'後始末
objOL.Quit
End Sub |
Sub bbb()
'受信トレイを探し、メールの件名などを表示してみる
'Outlookを開き、フォルダー名をメッセージボックスでテスト表示
Dim objOL As Object 'OutLookのアプリケーションオブジェクト
Dim objNAMESPC As Object '名前空間
Dim objFLD As Object 'フォルダー保存用
Dim objMAIL As Object 'メールアイテム
Dim y As Integer 'カウンター
'アプリケーションのオブジェクトを新規作成
Set objOL = CreateObject("Outlook.Application")
'Namespace オブジェクト作成
Set objNAMESPC = objOL.GetNamespace("MAPI")
'フォルダーの下、第二階層.Foldersでループさせる
For Each objFLD In objNAMESPC.Folders(1).Folders
'フォルダー名が受信トレイか?
If objFLD.Name = "受信トレイ" Then
'テストでメールを新規ブックに書き出す
Workbooks.Add '新規ブックを作成する
y = 1 '1行目から書き込む
'フォルダーのアイテム数分ループ Folders.Items
For Each objMAIL In objFLD.Items
'セルに代入
Cells(y, "A") = objMAIL.CreationTime '作成日
Cells(y, "B") = objMAIL.Subject
Cells(y, "C") = objMAIL.Body
'セット位置を移動
y = y + 1
Next objMAIL
End If
Next objFLD
'後始末
objOL.Quit
End Sub |
Private Sub UserForm_Initialize()
'フォームの初期化イベントでリストボックスにメールデータをセットする
Dim objOL As Object 'OutLookのアプリケーションオブジェクト
Dim objNAMESPC As Object '名前空間
Dim objFLD As Object 'フォルダー保存用
Dim objMAIL As Object 'メールアイテム
Dim strWORK As String
Me.lstMAIL.Clear '.Clearでリストボックスの内容を全てクリア
'アプリケーションのオブジェクトを新規作成
Set objOL = CreateObject("Outlook.Application")
'Namespace オブジェクト作成
Set objNAMESPC = objOL.GetNamespace("MAPI")
'フォルダーの下、第二階層.Foldersでループさせる
For Each objFLD In objNAMESPC.Folders(1).Folders
'フォルダー名が受信トレイか?
If objFLD.Name = "受信トレイ" Then
'フォルダーのアイテム数分ループ Folders.Items
For Each objMAIL In objFLD.Items
'作成日:題名で文字列を作成する
strWORK = objMAIL.CreationTime & ":" & objMAIL.Subject
'データをセット
Me.lstMAIL.AddItem (strWORK)
Next objMAIL
End If
Next objFLD
'後始末
objOL.Quit
End Sub |
Private Sub btnSET_Click()
'ボタンが押されたらリストボックスで選択されている
'メールアイテムのフラグに実施済みの文字をセットする
Dim objOL As Object 'OutLookのアプリケーションオブジェクト
Dim objNAMESPC As Object '名前空間
Dim objFLD As Object 'フォルダー保存用
Dim objMAIL As Object 'メールアイテム
Dim strWORK As String
'アプリケーションのオブジェクトを新規作成
Set objOL = CreateObject("Outlook.Application")
'Namespace オブジェクト作成
Set objNAMESPC = objOL.GetNamespace("MAPI")
'フォルダーの下、第二階層.Foldersでループさせる
For Each objFLD In objNAMESPC.Folders(1).Folders
'フォルダー名が受信トレイか?
If objFLD.Name = "受信トレイ" Then
'フォルダーのアイテム数分ループ Folders.Items
For Each objMAIL In objFLD.Items
'作成日:題名で文字列を作成する
strWORK = objMAIL.CreationTime & ":" & objMAIL.Subject
'リストボックスとデータが一致するかチェック
If Me.lstMAIL.Text = strWORK Then
'フラグデータをセット(書き換える)
objMAIL.FlagStatus = 2 'olFlagMarked (2)をセット参照設定時は定数で
objMAIL.FlagRequest = "実施済み" 'フラグ内容をセット
'objMAIL.FlagDueBy = Now '今回は期限はセットしない
objMAIL.Save '忘れずに保存する
MsgBox "フラグメッセージを書き換えました"
Exit For 'ループを強制的に抜ける
End If
Next objMAIL
End If
Next objFLD
'後始末
objOL.Quit
End Sub |
Private Sub btnCLOSE_Click()
Unload Me '自分自身を閉じます(笑)
End Sub |
ここまで、読んでいただきどうもです。ここから下は、三流君のホームページの紹介・案内です
目的の情報が見つかったか?少々心配しつつ、、、
|
気になったジャンル↓を選択してください。 人気記事(来場者が多いTOP3): Excel関係: Access関係: その他:VBAの共通関数やテキストファイルの操作など 開発時の操作: [F1を押してHELPを見る]/ [Debug.Print と イミディエイトウインドウ]/ [実行時エラーでデバッグ]/ [ウォッチ式とSTOP]/ [参照設定を行う] 仕様書(設計書?) XXXX書類: [基本設計書や要求仕様書]/ [テスト仕様書 テストデータ]/ [バグ票]/ [関数仕様書]/ [流れは 入力・処理・出力] ※↑文章の味付けが変わっていて、お口に合うかわかりませんが。。。 |
Blogとリンク:[三流君の作業日記]/
[VBAやASPのサンプルコード]/
広告-[通販人気商品の足跡]