フォルダーの完全なリスト (以下のコード) を取得するという問題に取り組みましたが、他の部分でさらにヘルプが必要な場合は、コメントを追加してください。回答を拡張します。
ComboBox で何をするのか理解できませんでした。この例では、フォームを作成し、ListBox (と呼ばれるListBox1
) を追加しました。以下のコードは、選択したフォルダーから下に向かってすべてのフォルダーの名前をリストボックスに入力します。コメントを読んで、他に何ができるかを確認してください (たとえば、サブフォルダーを再帰する - この場合は必要ないことはわかっています)。
さらにヘルプや情報が必要な場合はお知らせください。
Private Sub PopulateListBoxWithFolders()
Dim objApp As Outlook.Application
Dim objNamespace As Outlook.NameSpace
Dim objFolder As Outlook.MAPIFolder
' Clear current contents of listbox
ListBox1.Clear
Set objApp = New Outlook.Application
Set objNamespace = objApp.GetNamespace("MAPI")
' Allow user to select folder.
' Replace this with either objNamespace.GetDefaultFolder(...) or objNamespace.GetFolderFromID(...)
' to avoid the user having to select a folder
Set objFolder = objNamespace.PickFolder
' See if the user cancelled or no folder found
If Not objFolder Is Nothing Then
' Addition of true here recurses through all subfolders
ProcessFolder objFolder ', True
End If
End Sub
' Populates the ListBox with the folders. Optionally you can recurse all folders
Sub ProcessFolder(objStartFolder As Outlook.MAPIFolder, Optional blnRecurseSubFolders As Boolean = False, Optional strFolderPath As String = "")
Dim objFolder As Outlook.MAPIFolder
Dim i As Long
' Loop through the items in the current folder
For i = 1 To objStartFolder.Folders.Count
Set objFolder = objStartFolder.Folders(i)
' Populate the listbox
ListBox1.AddItem ListBox1.Text + objFolder.FolderPath
If blnRecurseSubFolders Then
' Recurse through subfolders
ProcessFolder objFolder, True, strFolderPath + "\" + objFolder.FolderPath
End If
Next
End Sub
複数選択リストボックスで選択されたアイテムを識別するコードが必要な場合は、ここにあります。ListBox を複数選択するMultiSelect
には、フォーム エディターでプロパティを次のように設定する必要があります。1 - fmMultiSelectMulti
Private Sub btnOK_Click()
Dim i As Long
' Loop through all items in the listbox identifying those that are selected
With ListBox1
For i = 0 To .ListCount - 1
If .Selected(i) Then
' Here goes the code to act on the selected item
' In the example below it outputs to the Immediate window
Debug.Print .List(i)
End If
Next i
End With
End Sub