最近我正在尝试创建一个选择特定文件夹的功能。
我在一个用户测试了这个并且它可以工作。但问题是我还想在其他用户使用此功能,但不必根据文件夹结构重写该功能。
该功能适用于所有文件夹名称(相同名称)。 它由1个主文件夹组成:#MemoScan和4个子文件夹。
根据这些文件夹名称,我想计算其中包含的邮件数量。
我创建了以下函数来执行此操作:
Function HowManyEmails() As Integer
Dim objOutlook As Object, objnSpace As Object, MyCurrentFolder As MAPIFolder
Dim EmailCount As Integer
Set objOutlook = CreateObject("Outlook.Application")
Set objnSpace = objOutlook.GetNamespace("MAPI")
Set MyCurrentFolder = objnSpace.folders("William").folders("#MemoScan")
sFolder = MyCurrentFolder
For Each Folder In MyCurrentFolder.folders
sFolder = Folder
sSubmap = Right(sFolder, Len(sFolder) - 1)
For Each Item In Folder.Items
If TypeName(Item) = "MailItem" Then
EmailCount = EmailCount + 1
End If
Next Item
Next Folder
HowManyEmails = EmailCount
End Function
正如您所看到的,需要检查的文件夹是硬编码的(需要是因为它在关闭的outlook事件上运行而没有选择任何内容)。
现在的路径是:objnSpace.folders("William").folders("#MemoScan")
然而,主要帐户/文件夹William
不会出现在其他用户身上。我的问题是,如何调整它以便只查找每个用户都相同的#MemoScan
文件夹?这甚至可能吗?
如果我退出主William
命名空间,则无法找到#MemoScan
文件夹。
此特定用户的文件夹结构如下:
答案 0 :(得分:2)
Namespace类提供Stores属性,该属性返回Stores集合对象,该对象表示当前配置文件中的所有Store对象。 Store类提供GetRootFolder方法,该方法返回表示Store的根级文件夹的Folder对象。您可以使用GetRootFolder方法枚举Store的根文件夹的子文件夹。与包含当前配置文件中所有商店的所有文件夹的NameSpace.Folders不同,Store.GetRootFolder.Folders允许您枚举当前配置文件中给定Store对象的所有文件夹。
Sub EnumerateFoldersInStores()
Dim colStores As Outlook.Stores
Dim oStore As Outlook.Store
Dim oRoot As Outlook.Folder
On Error Resume Next
Set colStores = Application.Session.Stores
For Each oStore In colStores
Set oRoot = oStore.GetRootFolder
Debug.Print (oRoot.FolderPath)
EnumerateFolders oRoot
Next
End Sub
Private Sub EnumerateFolders(ByVal oFolder As Outlook.Folder)
Dim folders As Outlook.folders
Dim Folder As Outlook.Folder
Dim foldercount As Integer
On Error Resume Next
Set folders = oFolder.folders
foldercount = folders.Count
'Check if there are any folders below oFolder
If foldercount Then
For Each Folder In folders
Debug.Print (Folder.FolderPath)
EnumerateFolders Folder
Next
End If
End Sub
您还可以针对Outlook中当前选定的文件夹运行代码。 Explorer类的CurrentFolder属性返回一个Folder对象,该对象表示资源管理器中显示的当前文件夹。