NameSpace オブジェクトを、すべての既存の Microsoft® Outlook® フォルダへのゲートウェイと考えることができます。既定では、Outlook は、すべてのパブリック フォルダおよびすべてのメールボックス フォルダを表す 2 つの最上位フォルダを作成します。メールボックス フォルダには、Outlook のすべての組み込みフォルダおよびカスタム フォルダが含まれます。各フォルダは MAPIFolder オブジェクトです。MAPIFolder オブジェクトには、MailItem オブジェクト、ContactItem オブジェクト、JournalItem オブジェクトなどの個別の Outlook アイテム オブジェクトと同様に、サブフォルダ (これらも MAPIFolder オブジェクトです) を含めることができます。
メモ Outlook において "アイテム" とは、ほかのアプリケーションにおけるファイルのように、情報を保持するオブジェクトです。アイテムにはメール メッセージ、予定、連絡先、仕事、履歴項目、およびメモが含まれます。
NameSpace オブジェクト変数を作成すると、NameSpace オブジェクトの GetDefaultFolder メソッドを使用して、Outlook のすべての組み込みアイテムの最上位フォルダにアクセスできます。たとえば、次のサンプル コードでは ContactItems フォルダへの参照を取得できます。
Dim fldContacts As Outlook.MAPIFolder
Set fldContacts = gnspNameSpace.GetDefaultFolder(olFolderContacts)
フォルダ名を使用しても、そのフォルダへの参照を取得できます。たとえば、次のプロシージャは、strFolderName 引数で名前が指定されている現在のユーザーのメールボックスにあるフォルダへの参照を取得します。
Function GetFolderByName(strFolderName As String) As Outlook.MAPIFolder
' このプロシージャは、strFolderName 引数で名前を指定した
' メールボックス フォルダ コレクション内のフォルダを表す
' MAPIFolder オブジェクトを取得します。
Dim fldMain As Outlook.MAPIFolder
On Error Resume Next
' 必要に応じて、InitializeOutlook プロシージャを使用して、グローバルな
' Application および NameSpace オブジェクト変数を初期化します。
If golApp Is Nothing Then
If InitializeOutlook = False Then
MsgBox "Unable to initialize Outlook Application " _
& "or NameSpace object variables!"
Exit Function
End If
End If
Set fldMain = gnspNameSpace.Folders(GetMailboxName()).Folders(strFolderName)
If Err = 0 Then
Set GetFolderByName = fldMain
Else
' メモ : ここで発生する可能性の高いエラーの原因は、strFolderName で
' 指定されたフォルダが見つからないことです。
Set GetFolderByName = Nothing
End If
End Function
NameSpace オブジェクトには、すべてのパブリック フォルダおよびユーザーのメールボックスを表す 2 つ以上の最上位フォルダがあります。前のプロシージャでは、GetMailboxName プロシージャを使用してメールボックス フォルダ名を取得します。
ユーザーのメールボックスにあるフォルダへの参照を取得すると、そのフォルダには、追加のフォルダ、個別の Outlook アイテム、またはその両方が含まれる場合があります。
Sub GetFolderInfo(fldFolder As Outlook.MAPIFolder)
' このプロシージャは、フォルダ内に含まれるアイテムに関する情報を
' [イミディエイト] ウィンドウに表示します。
Dim objItem As Object
Dim dteCreateDate As Date
Dim strSubject As String
Dim strItemType As String
Dim intCounter As Integer
On Error Resume Next
If fldFolder.Folders.Count > 0 Then
For Each objItem In fldFolder.Folders
Call GetFolderInfo(objItem)
Next objItem
End If
Debug.Print "Folder '" & fldFolder.Name & "' (Contains " _
& fldFolder.Items.Count & " items):"
For Each objItem In fldFolder.Items
intCounter = intCounter + 1
With objItem
dteCreateDate = .CreationTime
strSubject = .Subject
strItemType = TypeName(objItem)
End With
Debug.Print vbTab & "Item #" & intCounter & " - " _
& strItemType & " - created on " _
& Format(dteCreateDate, "mmmm dd, yyyy hh:mm am/pm") _
& vbCrLf & vbTab & vbTab & "Subject: '" _
& strSubject & "'" & vbCrLf
Next objItem
End Sub
GetFolderInfo プロシージャは、すべてのサブフォルダに対するフォルダの検証が終わるまで再帰的に呼び出されます。次に、フォルダまたはサブフォルダに含まれるアイテムに関する情報を [イミディエイト] ウィンドウに表示します。objItem オブジェクト変数は Object データ型を使用して宣言されるため、このプロシージャはすべての Outlook アイテムで機能します。
フォルダに含まれる単一のアイテム、またはアイテムのサブセットに対して作業を行うには、Restrict メソッドを使用します。Restrict メソッドは、メソッドの単一引数で指定された抽出条件を満足するオブジェクトのコレクションを返します。たとえば、次のプロシージャは Restrict メソッドを使用して、strLastName 引数で与えられた名前と一致する Outlook の ContactItem オブジェクトのコレクションを作成します。
Function GetItemFromName(strLastName As String, _
Optional strFirstName As String = "", _
Optional strCompany As String = "") As Boolean
' このプロシージャは、プロシージャに渡された引数で指定されている
' 抽出条件と一致する Outlook の ContactItem オブジェクトを返します。
Dim fldFolder As Outlook.MAPIFolder
Dim objItemsCollection As Object
Dim objItem As Object
Dim strCriteria As String
Dim objMatchingItem As Object
On Error GoTo GetItem_Err
' 必要に応じて、InitializeOutlook プロシージャを使用して、グローバルな
' Application および NameSpace オブジェクト変数を初期化します。
If golApp Is Nothing Then
If InitializeOutlook = False Then
MsgBox "Unable to initialize Outlook Application " _
& "or NameSpace object variables!"
Exit Function
End If
End If
Set fldFolder = gnspNameSpace.GetDefaultFolder(olFolderContacts)
If Len(strLastName) = 0 And Len(strFirstName) = 0 Then
If Len(strCompany) > 0 Then
strCriteria = "[Company] = '" & strCompany & "'"
End If
Else
strCriteria = IIf(Len(strFirstName) = 0, _
"[LastName] = '" & strLastName & "'", _
"[LastName] = '" & strLastName & _
"' AND [FirstName] = '" & strFirstName & "'")
End If
Set objItemsCollection = fldFolder.Items.Restrict(strCriteria)
If objItemsCollection.Count > 0 Then
If objItemsCollection.Count = 1 Then
For Each objItem In objItemsCollection
Set objMatchingItem = _
gnspNameSpace.GetItemFromID(objItem.EntryId)
objMatchingItem.Display
GetItemFromName = True
Exit Function
Next objItem
Else
GetItemFromName = False
Exit Function
End If
End If
GetItemFromName = True
GetItem_End:
Exit Function
GetItem_Err:
GetItemFromName = False
Resume GetItem_End
End Function
Restrict メソッドを使用する場合、角かっこで囲んだ Outlook フィールド名を使用して検索の抽出条件を指定します。And、Or、Not などの演算子を使用して複数の抽出条件を結合できます。たとえば、次のサンプルでは、過去 7 日間内に送信された、重要度の高い未読メール アイテムを検出します。
Dim fldMail As Outlook.MAPIFolder
Dim itmItems As Outlook.Items
strCriteria = "[SentOn] > '" & (Date - 7) _
& "' And [UnRead] = True And [Importance] = High"
Set fldMail = gnspNameSpace.GetDefaultFolder(olFolderInbox)
Set itmItems = fldMail.Items.Restrict(strCriteria)
この行は Business Address フィールドの値を含む、すべての Outlook の ContactItem アイテムを返します。
Set objContacts = fldContacts.Items.Restrict("[BusinessAddress] <> '" & strZLS & "'")
NorthwindContacts.dot サンプル ファイルは、Outlook の連絡先フォルダから連絡先を取得して UserForm に表示する Microsoft® Word のテンプレートです。ユーザーがフォームから連絡先を選択すると、連絡先の名前およびアドレスに関する情報が、メールのアドレス ブロックに挿入されます。
メモ NorthwindContacts.dot サンプル ファイルではまた、ユーザーが名前およびアドレスの情報をメールに挿入できるよう、連絡先の情報をデータベースから収集する方法も説明されています。
参照
Microsoft Outlook のオブジェクトを使用する | Application オブジェクトおよび NameSpace オブジェクトについて | Explorer および Inspector オブジェクトについて | Outlook の VBA について | Outlook のイベントについて