一、Outlook簡介編程
若要從Outlook 外控制Outlook對象,必須在編寫代碼的工程中創建對Outlook對象庫的引用。瀏覽器
1.1 Outlook Application說明:app
表明整個Microsoft Outlook應用程序。它是層次結構中惟一可以使用CreateObject方法或GetObject函數返回的對象。函數
1.2 Outlook Application 對象的用途:工具
- 做爲根對象,使用它可訪問 Outlook 層次結構中的其餘對象。
- 容許直接訪問使用CreateItem建立的新項目,而不用遍歷對象層次結構。
- 容許訪問當前界面對象(瀏覽器和檢查器)。
1.3 返回 Outlook Application 對象引用的方法:post
- 可使用 CreateObject 函數啓動新的Outlook 會話,而且返回Application對象的引用,該對象表明新會話。
- 可使用GetObject函數返回Application對象的引用,該對象表明正在運行的會話。請注意,由於在任何給定時刻只能有一個Outlook實例處於運行狀態,因此GetObject在Outlook中使用時無太大用途。CreateObject老是用來訪問當前Outlook實例或在沒有實例時建立新實例。可是,也可使用GetObject方法的錯誤跟蹤功能來肯定Outlook當前是否處於運行狀態。
- 能夠在幾種類型的語句中使用 New關鍵字隱式地建立Outlook Application對象的新實例,使用Set語句將對象變量設置爲Application對象的新實例。也能夠在Dim、Private、Public 或 Static語句中使用New關鍵字來聲明對象變量。Application對象的新實例在第一次引用該變量時建立。
若要啓動Outlook自動化會話,可使用前期綁定或後期綁定。後期綁定使用GetObject或CreateObject函數初始化Outlook。例如,如下代碼將對象變量設置爲Outlook Application對象,該對象爲Outlook對象模型中的最高層對象。全部自動化代碼都必須首先定義Outlook Application對象,纔可以訪問其餘Outlook對象。spa
Dim ol as Object/Variant Set ol = CreateObject("Outlook.Application")
若要使用前期綁定,首先要設置到Outlook對象庫的引用。而後就可用如下語法啓動Outlook會話。code
Dim ol as Outlook.Application Set ol = New Outlook.Application 或直接使用: Dim ol as New Outlook.Application
大部分編程解決方案都與 Outlook 中存儲的數據進行交互。Outlook在郵件應用程序編程接口(MAPI)文件夾中存儲其所有信息。在將對象變量設置爲Outlook Application對象後,一般要設置一個 Namespace對象來引用 MAPI,以下所示:htm
Set ol = New Outlook.Application Set ns = ol.GetNameSpace("MAPI") Set f = ns.GetDefaultFolder(olFolderContacts)
二、訪問Outlook
2.1 VBA包含3種從另外一個程序中訪問Outlook的方法。
2.1.1 Outlook未被加載:CreateObject方法
Sub GetOlObject_1() Dim ol As Object, counter As Integer Set ol = CreateObject("Outlook.Application") counter = ol.Getnamespace("MAPI").Getdefaultfolder(6).Items.Count Debug.Print "InBox中郵件的總數爲:"; counter End Sub
限制條件:CreateObject不能識別Outlook類型名稱,只能識別Outlook常量。
例如:在VBA中,"收件箱"映射的類型名稱是olFolderInbox,映射的Outlook常量是6。
counter = CreateObject("Outlook.Application").GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items.Count
將返回一個錯誤。
2.1.2 Outlook已經被加載:GetObject方法
Sub GetOlObject_2() Dim ol As Object, counter As Integer Set ol = GetObject(, "Outlook.Application") counter = ol.Getnamespace("MAPI").Getdefaultfolder(6).Items.Count Debug.Print "InBox中郵件的總數爲:"; counter End Sub
GetObject方法的限制條件同CreateObject。
2.1.3 加載Outlook_VBA_Library
References方法:不管Outlook是否被加載都獨立。
手動引用:VBE-->工具-->引用-->Microsoft Outlook 11.0/12.0/15.0 Object Library
Sub GetOlRef() ThisWorkbook.VBProject.References.AddFromFile "msoutl9.olb" 'Outlook 2000 ThisWorkbook.VBProject.References.AddFromFile "msoutl10.olb" 'Outlook 2003 ThisWorkbook.VBProject.References.AddFromFile "msoutl11.olb" 'Outlook 2007 End Sub
加載庫後,你可使用Outlook做爲一個對象。
counter = Outlook.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items.Count
此種狀況下,你可使用Outlook的類型名稱和常量。
Sub GetOlObject_3() Dim counter As Integer counter = Outlook.GetNamespace("MAPI").GetDefaultFolder(olFolderInbox).Items.Count Debug.Print "InBox中郵件的總數爲:"; counter End Sub
或者使用New關鍵字隱式地建立Outlook對象:
Sub GetOlObject_4() Dim ol As Outlook.Application, counter As Integer Set ol = New Outlook.Application counter = ol.GetNamespace("MAPI").GetDefaultFolder(6).Items.Count Debug.Print "3InBox中郵件的總數爲:"; counter End Sub
2.1.4 獲取動態引用:
Sub GetRefInfo() Dim i As Integer On Error Resume Next For i = 1 To ThisWorkbook.VBProject.References.Count Debug.Print ThisWorkbook.VBProject.References.Item(i).Name Debug.Print ThisWorkbook.VBProject.References.Item(i).Description Debug.Print ThisWorkbook.VBProject.References.Item(i).GUID Debug.Print ThisWorkbook.VBProject.References.Item(i).Major Debug.Print ThisWorkbook.VBProject.References.Item(i).Minor Debug.Print ThisWorkbook.VBProject.References.Item(i).FullPath Next End Sub
2.2 Outlook中的默認文件夾
2.2.1 DefaultFolder的清單
Sub ol_5() Dim ol As Object Set ol = CreateObject("Outlook.Application") With ol.GetNamespace("MAPI") Debug.Print .GetDefaultFolder(3).Name '刪除的項目Deleted items Debug.Print .GetDefaultFolder(4).Name '發件箱PostOut Debug.Print .GetDefaultFolder(5).Name '發送項目Sent items Debug.Print .GetDefaultFolder(6).Name '收件箱PostIn Debug.Print .GetDefaultFolder(9).Name '日曆Canlender Debug.Print .GetDefaultFolder(10).Name '聯繫人Contacts Debug.Print .GetDefaultFolder(11).Name '日記Journals Debug.Print .GetDefaultFolder(12).Name '便籤Notes Debug.Print .GetDefaultFolder(13).Name '任務Tasks Debug.Print .GetDefaultFolder(14).Name '提醒Reminders Debug.Print .GetDefaultFolder(15).Name '提醒Reminders Debug.Print .GetDefaultFolder(16).Name '草稿Drafts End With End Sub
2.3 Outlook的標準項目
Outlook標準的項目有如下幾種:電子郵件(email)、約會(appointment)、聯繫人(contact)、任務(task)、日記(journal)、便籤(note)、'sticker'(Post-it)、distributionlist
特殊項目:taskrequest、meetingrequest
Outlook根據存儲的文件夾區分郵件:
草稿郵件:草稿文件夾-->GetDefaultFolder(16)
郵件:映射到PostOut-->GetDefaultFolder(4)
發送郵件:映射到Sent items-->GetDefaultFolder(5)
接收郵件:映射到PostIn-->GetDefaultFolder(6)
2.3.1 標準項目清單:
Sub ol_6() With CreateObject("Outlook.Application") .CreateItem(0-7) End With End Sub
OlItemType |
value |
olAppointmentItem | 1 |
olContactItem | 2 |
olDistributionListItem | 7 |
olJournalItem | 4 |
olMailItem | 0 |
olNoteItem | 5 |
olPostItem | 6 |
olTaskItem | 3 |
3 Outlook中的VBA命令
Email屬性