【OutlookVBA】GetNamespaceメソッドのフォルダの種類と引数はなに?サンプルVBAで解説!

Outlookで受信メールや予定表、タスクなどのデータ取得で何かと使うことが多い
GetNamespaceメソッドですが、

・使い方がいまいちわからない…
・引数は何を指定していいかわからない…
・実行したがエラーとなった

ということはないでしょうか。

今回はそんなときに役立つ

・GetNamespaceメソッドの内容について
・GetDefaultFolderメソッドの構文について
・GetDefaultFolderメソッドのフォルダの種類と指定できる引数
・GetDefaultFolderメソッドのサンプルプログラム

についてまとめます!

NamespaceオブジェクトとGetNamespaceメソッドとは?

NamespaceオブジェクトはOutlookApplicationオブジェクトのひとつで、Outlookのメール、予定表、メモ、連絡先などOutlookの様々なデータを保有しています。

Namespaceオブジェクトを取得するには、
GetNamespaceメソッドに”MAPI”という名前空間を指定して取得します。

ですので、GetNamespaceメソッドはNamespaceオブジェクトを取得するメソッドという意味になります。

以下はサンプルコードです。

Set olApp = New Outlook.Application
Set olNamespace = olApp.GetNamespace("MAPI")

取得したデータは規定に設定されている個人用のフォルダへ種類別に格納されています。

次は個人用のフォルダからデータを取得するメソッドについて説明をします。

タカヒロ
タカヒロ
GetNamespaceメソッドで”MAPI”という空間にあるOutlookのデータ保管庫をいったん丸ごと取得して、後で必要なデータを個別に取得するというイメージですね。

GetDefaultFolderメソッドとは?

個人用のフォルダからデータを取得するメソッドは
Namespaceオブジェクト.GetDefaultFolderメソッドとなります。

GetDefaultFolderメソッドは引数で指定されたフォルダオブジェクトを返します。

例えば受信トレイをフォルダ指定すると受信トレイに入っているアイテムがオブジェクトとして取得できるというものです。

対象アカウントは前述の通り、Outlook上で「規定」と指定されているアカウントが対象となります。

タカヒロ
タカヒロ
DefaultFolderは規定で指定したアカウント(ユーザー)のフォルダという意味なんですね。

GetDefaultFolderメソッドの構文は?

GetDefaultFolderメソッドの構文は以下の通りです。

<フォルダの種類>」に取得したいフォルダの種類をパラメータ指定するだけです。

参考:https://docs.microsoft.com/ja-jp/office/vba/api/outlook.store.getdefaultfolder

Namespaceオブジェクト.GetDefaultFolder(<strong><フォルダの種類></strong>)

GetDefaultFolderメソッドで操作できるフォルダーの種類と指定できる引数はなに?

GetDefaultFolderメソッドで操作できるフォルダーの種類と指定できる引数は以下の通りです。

指定値 フォルダの種類
olFolderDeletedItems 3 削除済みアイテムフォルダ
olFolderOutbox 4 送信トレイフォルダ
olFolderSentMail 5 送信済みメールフォルダ
olFolderInbox 6 受信トレイフォルダ
olFolderCalendar 9 カレンダーフォルダ
olFolderContacts 10 連絡先フォルダ
olFolderJournal 11 Journalフォルダ
olFolderNotes 12 Notesフォルダ
olFolderTasks 13 タスクフォルダ
olFolderDrafts 16 下書きフォルダ
olPublicFoldersAllPublicFolders 18 Exchangeパブリックフォルダストアのすべてのパブリックフォルダフォルダ
※Exchangeアカウントでのみ使用できます
olFolderConflicts 19 Conflictsフォルダー(SyncIssuesフォルダーのサブフォルダー)
※Exchangeアカウントでのみ使用できます
olFolderSyncIssues 20 同期の問題フォルダー
olFolderLocalFailures 21 Local Failuresフォルダー(SyncIssuesフォルダーのサブフォルダー)
※Exchangeアカウントでのみ使用できます
olFolderServerFailures 22 サーバー障害フォルダー(同期の問題フォルダーのサブフォルダー)
※Exchangeアカウントでのみ使用できます
olFolderJunk 23 迷惑メールフォルダ
olFolderRssFeeds 25 RSSフィードフォルダ
olFolderToDo 28 ToDoフォルダー
olFolderManagedEmail 29 管理フォルダーグループの最上位フォルダー
※Exchangeアカウントでのみ使用できます
olFolderSuggestedContacts 30 提案された連絡先フォルダ

GetDefaultFolderメソッドのサンプルプログラムは?

GetDefaultFolderメソッドのサンプルプログラム(VBA)は以下の通りです。

Outlookの開発タブを有効にし、マクロを実装して実行してみてください。

VBAの設定方法がわからない方はこちらをご参照ください。

Outlook VBAをはじめよう!初心者向け手引き

GetDefaultFolderメソッドで指定期間の受信トレイ一覧を取得

GetDefaultFolderメソッドで指定期間の受信トレイ一覧を取得するサンプルVBAとなります。

期間は2020年10月1日から2日までを指定しています。

期間を変更したい場合は以下の日付を変更してください。
strStart = Format(“2020/10/1”, “yyyy/mm/dd”) ‘開始日を指定
strEnd = Format(“2020/10/2”, “yyyy/mm/dd”) ‘終了日を指定

Sub 指定日の受信トレイメールアイテムを取得()
 
    'Outlook用の定義
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.NameSpace
    Dim olFolder As Folder
    Dim olConItems
    Dim olItem
    Dim strStart As String
    Dim strEnd As String
    
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの受信トレイを取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderInbox)
    Set olConItems = olFolder.Items
 
    strStart = Format("2020/10/1", "yyyy/mm/dd") '開始日を指定
    strEnd = Format("2020/10/2", "yyyy/mm/dd")  '終了日を指定
    strEnd = DateAdd("d", 1, strEnd)   ' 1日追加
    
    'Restrictメソッドで期間指定して抽出するメールアイテムを絞り込む
    Set olConItems = olConItems.Restrict("[ReceivedTime] >= '" & strStart & "' And [ReceivedTime] < '" & strEnd & "'")
 
    For Each olItem In olConItems
        With olItem
            Debug.Print "受信日:" & .ReceivedTime
            Debug.Print "タイトル:" & .Subject
        End With
    Next
 
    'オブジェクトクリア
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing

End Sub

はい、受信トレイのメールアイテムが取得できましたね!

GetDefaultFolderメソッドで指定期間の予定一覧を取得

GetDefaultFolderメソッドで指定期間の予定一覧を取得するサンプルVBAとなります。

期間は2020年10月1日から2日までを指定しています。

期間を変更したい場合は以下の日付を変更してください。
strStart = Format(“2020/10/1”, “yyyy/mm/dd”) ‘開始日を指定
strEnd = Format(“2020/10/2”, “yyyy/mm/dd”) ‘終了日を指定

Sub 指定日の会議表アイテムを取得()
 
    'Outlook用の定義
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.NameSpace
    Dim olFolder As Folder
    Dim olConItems As Outlook.Items
    Dim olItem  As AppointmentItem
    Dim strStart As String
    Dim strEnd As String
    
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの予定表を取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderCalendar)
    Set olConItems = olFolder.Items
 
    strStart = Format("2020/10/1", "yyyy/mm/dd") '開始日を指定
    strEnd = Format("2020/10/2", "yyyy/mm/dd")  '終了日を指定
    strEnd = DateAdd("d", 1, strEnd)   ' 1日追加
    
    'Findメソッドで期間指定して抽出するスケジュールを絞り込む
    Set olItem = olConItems.Find("[End] < """ & strEnd & """ AND [Start] >= """ & strStart & """")
    
    While TypeName(olItem) = "AppointmentItem"
        'Findで検索すると期間範囲外の余計なものまでヒットしてしまうので、再度フィルタリングします。
        If olItem.Start >= strStart And olItem.End < strEnd Then
            With olItem
                Debug.Print "タイトル:" & .Subject
                Debug.Print "場所:" & .Location
                Debug.Print "開始日時:" & .Start
                Debug.Print "終了日時:"; .End
            End With
            lnContactCount = lnContactCount + 1
        End If
        Set olItem = olConItems.FindNext
    Wend
 
    'オブジェクトクリア
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
 
    
End Sub

はい、指定期間の予定表が取得できましたね!

GetDefaultFolderメソッドで指定期間のタスクアイテムを取得

GetDefaultFolderメソッドで指定期間のタスクアイテムを取得するサンプルVBAとなります。

期間は2020年10月1日から2日までを指定しています。

期間を変更したい場合は以下の日付を変更してください。
strStart = Format(“2020/10/1”, “yyyy/mm/dd”) ‘開始日を指定
strEnd = Format(“2020/10/2”, “yyyy/mm/dd”) ‘終了日を指定

Sub 指定日のタスクアイテムを取得()
 
    'Outlook用の定義
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.NameSpace
    Dim olFolder As Folder
    Dim olConItems
    Dim olItem
    Dim strStart As String
    Dim strEnd As String
    
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの受信トレイを取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderTasks)
    Set olConItems = olFolder.Items
 
    strStart = Format("2020/10/1", "yyyy/mm/dd") '開始日を指定
    strEnd = Format("2020/10/2", "yyyy/mm/dd")  '終了日を指定
    strEnd = DateAdd("d", 1, strEnd)   ' 1日追加
    
    'Restrictメソッドで期間指定して抽出するタスクアイテムを絞り込む
    Set olConItems = olConItems.Restrict("[DueDate] >= '" & strStart & "' And [DueDate] < '" & strEnd & "'")
 
    For Each olItem In olConItems
        With olItem
            Debug.Print "期限:" & .DueDate
            Debug.Print "タイトル:" & .Subject
        End With
    Next
 
    'オブジェクトクリア
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
 
    
End Sub

はい!指定期間のタスクが取得できましたね!

GetDefaultFolderメソッドで指定期間のメモアイテムを取得

GetDefaultFolderメソッドで指定期間のメモアイテムを取得するサンプルVBAとなります。

期間は2020年10月1日から2021年10月31日までを指定しています。

期間を変更したい場合は以下の日付を変更してください。
strStart = Format(“2020/10/1”, “yyyy/mm/dd”) ‘開始日を指定
strEnd = Format(“2021/10/31”, “yyyy/mm/dd”) ‘終了日を指定

Sub 指定日のメモアイテムを取得()
 
    'Outlook用の定義
    Dim olApp As Outlook.Application
    Dim olNamespace As Outlook.NameSpace
    Dim olFolder As Folder
    Dim olConItems
    Dim olItem
    Dim strStart As String
    Dim strEnd As String
    
    'Outlookオブジェクトを設定し、MAPI名前空間を介してOutlookの受信トレイを取得します。
    Set olApp = New Outlook.Application
    Set olNamespace = olApp.GetNamespace("MAPI")
    Set olFolder = olNamespace.GetDefaultFolder(olFolderNotes)
    Set olConItems = olFolder.Items
 
    strStart = Format("2020/10/1", "yyyy/mm/dd") '開始日を指定
    strEnd = Format("2021/10/31", "yyyy/mm/dd")  '終了日を指定
    strEnd = DateAdd("d", 1, strEnd)   ' 1日追加
    
    'Restrictメソッドで期間指定して抽出するメモアイテムを絞り込む
    Set olConItems = olConItems.Restrict("[CreationTime] >= '" & strStart & "' And [CreationTime] < '" & strEnd & "'")

 
    For Each olItem In olConItems
        With olItem
            Debug.Print "作成日:" & .CreationTime
            Debug.Print "タイトル:" & .Subject
            Debug.Print "メモ本文:" & .Body
        End With
    Next
 
    'オブジェクトクリア
    Set olItem = Nothing
    Set olConItems = Nothing
    Set olFolder = Nothing
    Set olNamespace = Nothing
    Set olApp = Nothing
 
    
End Sub

はい!指定期間のメモが取得できましたね!

タカヒロ
タカヒロ
OutlookのメモをExcelへエクスポートする方法についてまとめましたので、よろしければご参照ください。

【VBA】OutlookのメモをExcelへエクスポートする方法!期間指定もあり!

GetDefaultFolderメソッドで指定できないフォルダを調べる方法

GetDefaultFolderでは定数で定義された規定ユーザのフォルダが対象となり、それ以外のフォルダについては対象外となります。

タカヒロ
タカヒロ
例えばや個人でルートに作成したフォルダや共有アカウントの共有フォルダ、パブリックフォルダはGetDefaultFolderメソッドでは取得できません。

ただ、規定外のフォルダを取得対象にしたい場合があります。
それにはまずローカルのOutlookフォルダ構成を確認する必要があります。

Outlookフォルダ構成はユーザごとにフォルダが区切られていますので、まずは取得したいユーザのフォルダ番号を確認します。

以下の記事のコードをOutlookまたはExcel側のVBAに実装し、確認します。

ユーザーフォルダの位置番号を確認する(Outlookフォルダチェッカー)

以下のような形で出力されていることが確認できます。

**番目ユーザーフォルダ:****@extan.jp
1層目:削除済みアイテム
1層目:受信トレイ
1層目:送信トレイ
1層目:送信済みアイテム
1層目:クイック操作設定
1層目:連絡先
2層目:追加連絡先フォルダ
・・・・

「**番目」がユーザーフォルダの位置番号となりますので、取得したいアカウントの番号をメモします。

次に以下の記事を参考に、アカウントの番号「**」と<フォルダ名>を指定します。

【裏技改良版】ローカルユーザーでも共有の連絡先を取得する方法Ver2

<span class="token keyword">Set</span> olFolder <span class="token operator">=</span> olNamespace<span class="token punctuation">.</span>Folders<span class="token punctuation">(</span>**<span class="token punctuation">)</span><span class="token punctuation">.</span>Folders<span class="token punctuation">(</span><span class="token string">"<フォルダ名>"</span><span class="token punctuation">)</span>

階層がさらにある場合は以下のようにFoldersコレクションを追加してください。

<span class="token keyword">Set</span> olFolder <span class="token operator">=</span> olNamespace.Folders(**).Folders(<span class="token string">"<1階層目フォルダ名>"</span>).Folders(<span class="token string">"<2階層目フォルダ名>"</span>)

さいごに

いかがでしょうか?

今回は、

・GetNamespaceメソッドの内容について
・GetDefaultFolderメソッドの構文について
・GetDefaultFolderメソッドのフォルダの種類と指定できる引数
・GetDefaultFolderメソッドのサンプルプログラム

についてまとめました。

GetNamespaceメソッドとGetDefaultFolderメソッドはよく使いますので、
しっかり構文と引数を覚えておきたいですね。



この記事の関連キーワード

こちらの記事の関連キーワード一覧です。クリックするとキーワードに関連する記事一覧が閲覧できます。








コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です