読者です 読者をやめる 読者になる 読者になる

三流君 ken3のmemo置き場

メモ置き場、保管庫として利用。まとまっていませんがヨロシク



Outlookのフォルダー を 探ってみた アイテムとサブフォルダー

Outlook VBA

Outlookのアイテム(メール、連絡先、仕事、予定...)
は、
フォルダーの下にぶら下がってます。

.GetDefaultFolder で 既定のフォルダーを指定すると便利です

OlDefaultFolders 列挙 をヘルプで見ると、
現在の Outlook プロファイルで扱うフォルダ タイプを指定します。
名前 値 説明
olFolderCalendar 9 予定表フォルダ。
olFolderConflicts 19 競合フォルダ (同期の失敗フォルダのサブフォルダ)。Exchange アカウントの場合のみ。
olFolderContacts 10 連絡先フォルダ。
olFolderDeletedItems 3 削除済みアイテム フォルダ。
olFolderDrafts 16 下書きフォルダ。
olFolderInbox 6 受信トレイ フォルダ。
olFolderJournal 11 履歴フォルダ。
olFolderJunk 23 迷惑メール フォルダ。
olFolderLocalFailures 21 ローカルの失敗フォルダ (同期の失敗フォルダのサブフォルダ)。Exchange アカウントの場合のみ。
olFolderManagedEmail 29 管理対象のフォルダ グループの最上位フォルダ。管理対象のフォルダについて詳しくは、Microsoft Office Outlook のヘルプを参照。Exchange アカウントの場合のみ。
olFolderNotes 12 メモ フォルダ。
olFolderOutbox 4 送信トレイ フォルダ。
olFolderSentMail 5 送信済みアイテム フォルダ。
olFolderServerFailures 22 サーバーの失敗フォルダ (同期の失敗フォルダのサブフォルダ)。Exchange アカウントの場合のみ。
olFolderSyncIssues 20 同期の失敗フォルダ。Exchange アカウントの場合のみ。
olFolderTasks 13 仕事フォルダ。
olFolderToDo 28 To Do フォルダ。
olPublicFoldersAllPublicFolders 18 Exchange パブリック フォルダ ストア内の All Public Folders フォルダ。Exchange アカウントの場合のみ。
olFolderRssFeeds 25 RSS フィード フォルダ。

などが、指定できます。

.Display で 画面に表示します。

.Items.Count でアイテム数
.Items(n) で取り出したり、

.Folders("名前") で サブフォルダーを指定したり、
.Folders.Count で サブフォルダーの数がわかるので、
ループで回して、
.Folders.Item(n) で n番目のフォルダーを使用したりできます。

簡単な解説動画

いつもの、右往左往している、怪しい実演動画です。
Outlook怪しい実演動画

テストで作ったコード

'フォルダーとその下のアイテムを探る。。。Outlook2007でテスト
Sub tset()
    
    Dim oNamespace As NameSpace
    
    Dim oFolder As Outlook.Folder 'フォルダー
    Dim mITEM As Outlook.MailItem 'メールアイテム
    Dim n As Integer              'ループのカウンター
    Dim subFolder As Folder       'サブフォルダー1つ下を探る
    Dim c As Integer              'フォルダのループカウンタ
    
    ' NameSpace オブジェクトへの参照を取得します。
    Set oNamespace = Application.GetNamespace("MAPI")
    
    ' 既定のフォルダへの参照を取得し、フォルダを表示します。
    Set oFolder = oNamespace.GetDefaultFolder(olFolderInbox) '受信トレイを指定
    oFolder.Display   '選択したフォルダーの表示
    'Set Application.ActiveExplorer.CurrentFolder = oFolder
    
    'フォルダーの下には ITEMここではメール と サブフォルダーが存在します
    
    '受信トレイ直下のアイテム・メールの件名を表示
    'メール数分ループ
    Debug.Print "メールの数は " & oFolder.Items.Count
    For n = 1 To oFolder.Items.Count 'アイテム数分ループ
        Set mITEM = oFolder.Items(n)
        '↑代入が終わったので、各プロパティに mITEM.XXXX で アクセスする
        Debug.Print "件名:" & mITEM.Subject  '件名表示
    Next
    Debug.Print "---"
    
    'サブフォルダー
    Debug.Print "サブフォルダーの数は " & oFolder.Folders.Count
    Debug.Print "---"
    
    For c = 1 To oFolder.Folders.Count  'サブフォルダーの数だけループする
    
        Set subFolder = oFolder.Folders.Item(c) 'c番目のフォルダーを代入
        Set Application.ActiveExplorer.CurrentFolder = subFolder  '移動
        
        'サブフォルダーのメール数分ループ
        Debug.Print "サブフォルダ名: " & subFolder.Name & " には、"
        Debug.Print "メールが " & subFolder.Items.Count & "通"
        
        For n = 1 To subFolder.Items.Count 'アイテム数分ループ
            Set mITEM = subFolder.Items(n)
            '↑代入が終わったので、各プロパティに mITEM.XXXX で アクセスする
            Debug.Print "件名:" & mITEM.Subject '件名表示
        Next
        Debug.Print "---"
    
    Next
    
    '使用したオブジェクトの解放 = Nothing
    Set mITEM = Nothing
    Set subFolder = Nothing
    Set oFolder = Nothing
    Set oNamespace = Nothing

End Sub

終わりの挨拶

まだまだ、探りかたとサンプルが甘いけど、

三流君VBAでOutlookを操作する
三流君 Outlook Mail メールを操作する
三流君 Outlook Task 仕事・タスクを操作する
三流君 Outlook Appointment 予定表を操作する
三流君 Outlook Contact 連絡先・アドレス帳を操作する

で、細々解説しているので、良かったらのぞきにきてください。