2.2 商店

Outlook 将电子邮件,日历项,备注,任务等存储在称为 Stores 的文件中。如果你看一下你的文件夹窗格,你会看到类似的东西:

Aaaaaaaaaa
  Inbox
  Drafts
  Deleted Items
  :  :

Bbbbbbbbbb
  Inbox
  Drafts
  Deleted Items
  :  :

Cccccccccc
:  :

AaaaaaaaaBbbbbbbbbbCccccccccc 是商店的用户名或显示名。我一直接受这些名称的 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 都是集合,但是包含不同类型的对象:StoreFolderStore 对象只能引用光盘上的文件。Folder 可以引用光盘上的文件,但也可以引用商店中的文件夹,例如收件箱已发送邮件StoresFoldersStoreFolder 都是 Outlook 对象模型的一部分。本教程系列向你介绍了该模型,但它不是一个正式的定义。如果你需要正式定义,请在你最喜欢的搜索引擎中输入 outlook vba object model。确保查看模型的 VBA 版本。