コレクションを反復処理して、ユーザーがアクセスできるすべての連絡先フォルダーを見つけるコードがありますApplication.Session.Stores
。
これは、ユーザーの連絡先とすべての公開連絡先フォルダーに対して機能します。また、ユーザーが [ツール] -> [アカウント設定...] メニュー コマンドを使用して追加した追加のメールボックス アカウント内のすべての連絡先フォルダーも検索します。
ただし、これには、ユーザーが他のユーザーのアカウントに完全にアクセスできる必要があります。ユーザーが別の人の連絡先にしかアクセスできない場合、その人の連絡先は [連絡先] ビューの [人の連絡先] グループに表示されます。の下に表示されない連絡先フォルダーを見つけるにはどうすればよいSession.Stores
ですか?
完全なメールボックスへのアクセスを追加せずに他のユーザーの連絡先フォルダーを表示するには、Outlook メニューから [ファイル] -> [開く] -> [他のユーザーのフォルダー...] をクリックします。ダイアログ ボックスで、他のユーザーの名前を入力し、[Contacts
フォルダーの種類] ドロップダウン リストから選択します。
これは、すべてのユーザーの Outlook 連絡先フォルダーのリストを検索するために使用しているコード (エラー チェックとログを除く) です。これは、型への早期バインディングを使用して実行できる (そして実行する必要がある) ことはわかってOutlook.Application
いますが、それは結果には影響しません。EnumerateFolders
すべてのサブフォルダーを検索するように再帰的です。
Dim folderList = New Dictionary(Of String, String)
Dim outlookApp = CreateObject(Class:="Outlook.Application")
For Each store As Object In outlookApp.Session.Stores
EnumerateFolders(folderList, store.GetRootFolder)
Next
Private Sub EnumerateFolders(ByRef folderList As Dictionary(Of String, String), ByVal folder As Object)
Try
If folder.DefaultItemType = 2 Then
folderList.Add(folder.EntryID, folder.FolderPath.Substring(2))
End If
For Each subFolder As Object In folder.Folders
EnumerateFolders(folderList, subFolder)
Next
Catch ex As Exception
End Try
End Sub