Outlookで受信メールや予定表、タスクなどのデータ取得で何かと使うことが多い
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")
取得したデータは規定に設定されている個人用のフォルダへ種類別に格納されています。
次は個人用のフォルダからデータを取得するメソッドについて説明をします。
GetDefaultFolderメソッドとは?
個人用のフォルダからデータを取得するメソッドは
Namespaceオブジェクト.GetDefaultFolderメソッドとなります。
GetDefaultFolderメソッドは引数で指定されたフォルダオブジェクトを返します。
例えば受信トレイをフォルダ指定すると受信トレイに入っているアイテムがオブジェクトとして取得できるというものです。
対象アカウントは前述の通り、Outlook上で「規定」と指定されているアカウントが対象となります。
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の設定方法がわからない方はこちらをご参照ください。
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
はい!指定期間のメモが取得できましたね!
GetDefaultFolderメソッドで指定できないフォルダを調べる方法
GetDefaultFolderでは定数で定義された規定ユーザのフォルダが対象となり、それ以外のフォルダについては対象外となります。
ただ、規定外のフォルダを取得対象にしたい場合があります。
それにはまずローカルのOutlookフォルダ構成を確認する必要があります。
Outlookフォルダ構成はユーザごとにフォルダが区切られていますので、まずは取得したいユーザのフォルダ番号を確認します。
以下の記事のコードをOutlookまたはExcel側のVBAに実装し、確認します。
ユーザーフォルダの位置番号を確認する(Outlookフォルダチェッカー)
以下のような形で出力されていることが確認できます。
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>)
さいごに
いかがでしょうか?
今回は、
・GetDefaultFolderメソッドの構文について
・GetDefaultFolderメソッドのフォルダの種類と指定できる引数
・GetDefaultFolderメソッドのサンプルプログラム
についてまとめました。
GetNamespaceメソッドとGetDefaultFolderメソッドはよく使いますので、
しっかり構文と引数を覚えておきたいですね。
コメントを残す