Outlook 2007多选文件夹

时间:2013-03-28 02:48:31

标签: vba outlook

第一次问题:D。

我一直在为Outlook 2007编写一个Marco来让用户选择一个文件夹然后用该文件夹移出所有邮件并将其移动到个人的Arhcive文件夹,其中使用所选的文件夹名称作为目标个人文件夹。

e.g。

用户选择名为'Test'

的randon文件夹

marco将预先映射到个人文件夹,然后它将找到具有相同名称的子文件夹并移动邮件项目。

我的问题:

我目前正在使用'。 PickFolder '语法来使用选择文件夹,我该怎么做才有多选文件夹形式:

  • 如何使用Combobox和列表框表单将所有fodler的Mapi显示在自定义表单中。

我知道这只会在一个级别,但这就是我需要的,因为200多个文件夹在一个级别。

正如代码所示,它一次只能用一个文件夹工作,但我想反对。

骗过你。

1 个答案:

答案 0 :(得分:1)

我已经解决了获取完整文件夹列表的问题(下面的代码),但如果您需要更多其他部分的帮助,请添加评论,我会扩展我的答案。

我不明白你会用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中的所选项,那么它就是。要使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