第一次问题:D。
我一直在为Outlook 2007编写一个Marco来让用户选择一个文件夹然后用该文件夹移出所有邮件并将其移动到个人的Arhcive文件夹,其中使用所选的文件夹名称作为目标个人文件夹。
e.g。
用户选择名为'Test'
的randon文件夹marco将预先映射到个人文件夹,然后它将找到具有相同名称的子文件夹并移动邮件项目。
我的问题:
我目前正在使用'。 PickFolder '语法来使用选择文件夹,我该怎么做才有多选文件夹形式:
我知道这只会在一个级别,但这就是我需要的,因为200多个文件夹在一个级别。
正如代码所示,它一次只能用一个文件夹工作,但我想反对。
骗过你。
答案 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