2.2 商店
Outlook 将电子邮件,日历项,备注,任务等存储在称为 Stores 的文件中。如果你看一下你的文件夹窗格,你会看到类似的东西:
Aaaaaaaaaa
Inbox
Drafts
Deleted Items
: :
Bbbbbbbbbb
Inbox
Drafts
Deleted Items
: :
Cccccccccc
: :
Aaaaaaaaa
,Bbbbbbbbbb
和 Cccccccccc
是商店的用户名或显示名。我一直接受这些名称的 Outlook 默认值,这些名称多年来一直在变化。一旦默认值是我的名字,它就是我的电子邮件地址。这些商店的文件名可能相同,但有一个扩展名,如 PST 或 OST,或者可能是完全不同的东西。VBA 宏需要用户名来访问商店,而不关心文件名或扩展名。
你可以拥有任意数量的商店。我有安装 Outlook 时为我创建的“Outlook 数据文件”。当我为我的电子邮件地址添加帐户时,Outlook 创建了以电子邮件地址命名的新商店,例如“JohnDoe@hotmail.com”和“DoeJohn@gmail.com”。为了减少主商店的大小,我在名为 Archive 2015
的商店中保存旧电子邮件。
如果你是业务用户,则可以访问共享存储或同事存储。
下面的宏显示了列出你可以访问的商店的三种不同方式。我建议你创建一个新模块来保存下面的代码并用于 F4 访问模块的属性,这样你就可以将其命名为 ModIntro
或你选择的其他名称。如果你完成了本系列的第 1 部分,那么你已经拥有了这样一个模块。
将这些宏复制到模块并测试每个宏给出相同的输出。
Sub ListStores1()
Dim InxStoreCrnt As Integer
Dim NS As NameSpace
Dim StoresColl As Folders
Set NS = CreateObject("Outlook.Application").GetNamespace("MAPI")
Set StoresColl = NS.Folders
For InxStoreCrnt = 1 To StoresColl.Count
Debug.Print StoresColl(InxStoreCrnt).Name
Next
End Sub
Sub ListStores2()
Dim StoresColl As Stores
Dim StoreCrnt As Store
Set StoresColl = Session.Stores
For Each StoreCrnt In StoresColl
Debug.Print StoreCrnt.DisplayName
Next
End Sub
Sub ListStores3()
Dim InxStoreCrnt As Long
With Application.Session
For InxStoreCrnt = 1 To .Folders.Count
Debug.Print .Folders(InxStoreCrnt).Name
Next
End With
End Sub
你会发现 VBA 通常有几种方法可以达到同样的效果。上面我展示了三种访问商店的方法。你不需要记住它们 - 选择你自己喜欢的 - 但你需要知道有几种方法,因为其他人,你可能需要学习的代码,会有不同的收藏。
宏 ListStores1()
和 ListStores2()
中的变量 StoresColl
都是集合,但是包含不同类型的对象:Store
和 Folder
。Store
对象只能引用光盘上的文件。Folder
可以引用光盘上的文件,但也可以引用商店中的文件夹,例如收件箱和已发送邮件。Stores
,Folders
,Store
和 Folder
都是 Outlook 对象模型的一部分。本教程系列向你介绍了该模型,但它不是一个正式的定义。如果你需要正式定义,请在你最喜欢的搜索引擎中输入 outlook vba object model
。确保查看模型的 VBA 版本。