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 版本。