Microsoft Office XP Developer
Outlook のフォルダおよびアイテムを使用する

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 のイベントについて

Page view tracker