最權(quán)威的Outlook中的 VBA 入門_第1頁(yè)
最權(quán)威的Outlook中的 VBA 入門_第2頁(yè)
最權(quán)威的Outlook中的 VBA 入門_第3頁(yè)
最權(quán)威的Outlook中的 VBA 入門_第4頁(yè)
最權(quán)威的Outlook中的 VBA 入門_第5頁(yè)
已閱讀5頁(yè),還剩11頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、Outlook 2010 中的 VBA 編程您是否面臨從 Outlook 2010 中重復(fù)清除多個(gè)聯(lián)系人的難題?是否必須將大量電子郵件附件逐一保存到硬盤?是否想從某些電子郵件消息中自動(dòng)創(chuàng)建日歷項(xiàng)目?還是不知道如何將 Microsoft Outlook 2010 中的聯(lián)系人高效地導(dǎo)入 Microsoft Excel 2010 電子表格? 使用 Visual Basic for Applications (VBA) 可以執(zhí)行上述任務(wù)并實(shí)現(xiàn)更多功能,VBA 是一種簡(jiǎn)單而又強(qiáng)大的編程語(yǔ)言,可為 Office 2010 應(yīng)用程序擴(kuò)展新功能,還可以自動(dòng)執(zhí)行重復(fù)性任務(wù)。本文面向有經(jīng)驗(yàn)的 Outlook 用戶

2、,他們希望了解有關(guān) VBA 的信息,還希望深入了解編程對(duì)其根據(jù)需要定制 Outlook 2010 有何幫助。在閱讀本文之前,您可能要閱讀介紹性文章Office 2010 中的 VBA 入門,其中詳細(xì)介紹了有關(guān) VBA 編程的基礎(chǔ)知識(shí)。Office 2010 中的 VBA 編程的強(qiáng)大功能在于,使用 VBA 可以完成用鼠標(biāo)、鍵盤或?qū)υ捒蚩梢詧?zhí)行的幾乎所有操作。而且,如果使用 VBA 可以執(zhí)行一次,就可以輕松地執(zhí)行上百次、上千次。(實(shí)際上,自動(dòng)執(zhí)行重復(fù)性任務(wù)是 VBA 在 Office 中的一種最常見(jiàn)用法。)除了可通過(guò)編寫 VBA 腳本來(lái)加速執(zhí)行日常任務(wù),還可以使用 VBA 為 Office 201

3、0 應(yīng)用程序添加新功能,或以特定于您的業(yè)務(wù)需要的方式來(lái)提示文檔用戶并與之交互。例如,在 Outlook 2010 中,您可以使用 VBA 通過(guò)標(biāo)準(zhǔn)用戶界面中未提供的方式對(duì)聯(lián)系人、電子郵件、日歷項(xiàng)目或任務(wù)執(zhí)行排序、導(dǎo)出和修改操作。本文中的教程可使用 VBA 實(shí)現(xiàn) Outlook 的自動(dòng)化。該教程是一個(gè)實(shí)際示例,研究為有經(jīng)驗(yàn)的 Outlook 用戶提供的編程、VBA 和開(kāi)發(fā)工具。選擇方法VBA 編程是一種功能強(qiáng)大的解決方案,但并不總是最佳方法。有時(shí)候使用其他途徑來(lái)實(shí)現(xiàn)目標(biāo)更合適。關(guān)鍵問(wèn)題在于是否有更簡(jiǎn)單的方法。在開(kāi)始 VBA 項(xiàng)目之前,請(qǐng)考慮內(nèi)置工具和標(biāo)準(zhǔn)功能。例如,如果需要在 Outlook 中

4、執(zhí)行一項(xiàng)費(fèi)時(shí)的操作,可考慮使用規(guī)則來(lái)解決此問(wèn)題。是否可以執(zhí)行一次任務(wù)然后使用 Ctrl+Y(重做)來(lái)重復(fù)該任務(wù)?Outlook 2010 是一種功能強(qiáng)大的應(yīng)用程序;您需要的解決方案可能已經(jīng)準(zhǔn)備就緒了?;ㄐr(shí)間了解有關(guān) Outlook 2010 的更多信息,再跳轉(zhuǎn)到編程過(guò)程。在開(kāi)始 VBA 項(xiàng)目之前,確保您有時(shí)間使用 VBA。需要關(guān)注編程,編程結(jié)果可能無(wú)法預(yù)知。尤其是初學(xué)者,除非有時(shí)間仔細(xì)研究,否則切勿依靠編程。當(dāng)期限迫近會(huì)造成極大壓力時(shí),可嘗試編寫“快速腳 本”來(lái)解決問(wèn)題。如果您的時(shí)間很緊,可以使用較傳統(tǒng)的方法,即使這些方法單調(diào)又重復(fù),也必須這樣做。VBA 編程 101通過(guò)代碼使應(yīng)用程序執(zhí)行操

5、作您可能認(rèn)為編寫代碼是一項(xiàng)神秘而又復(fù)雜的工作,但基本原則是使用日常推理,并且很容易掌握。Office 2010 應(yīng)用程序的創(chuàng)建方式如下:公開(kāi)可以接收指令的對(duì)象,類似于為了與電話交互而設(shè)計(jì)帶按鍵的電話。按下按鍵時(shí),電話會(huì)識(shí)別指令并按照撥號(hào)順序包括對(duì)應(yīng)的號(hào)碼。在編程時(shí),您是通過(guò)向應(yīng)用程序中的各個(gè)對(duì)象 發(fā)送指令來(lái)與應(yīng)用程序交互。這些對(duì)象是可擴(kuò)展的,但有限制。這些對(duì)象只能執(zhí)行為其設(shè)計(jì)的操作,并且只按照您的指令執(zhí)行操作。例如,請(qǐng)考慮這樣的用戶:他在 Outlook 中創(chuàng)建電子郵件、選擇收件人、鍵入郵件主題,然后單擊“發(fā)送”。在 VBA 編程中,Outlook 會(huì)公開(kāi)一個(gè) MailItem 對(duì)象。使用 V

6、BA 代碼,您可以設(shè)置 MailItem 的主題和正文,并告訴它執(zhí)行“保存”或“發(fā)送”操作。閱讀本文后,您將了解有關(guān)這些對(duì)象、這些對(duì)象的組織方式及其描述和操作方式的更多信息。對(duì)象、方法和屬性開(kāi)發(fā)人員通過(guò)層次結(jié)構(gòu)來(lái)組織編程對(duì)象,該層次結(jié)構(gòu)稱為應(yīng)用程序的對(duì)象模型。例如,Outlook 中的“收件箱”是 Outlook Namespace 對(duì)象中的一個(gè) Folder 對(duì)象。Folder 對(duì)象包含 MailItem 對(duì)象,等等。對(duì)象模型概略地對(duì)用戶界面中顯示的內(nèi)容進(jìn)行鏡像,對(duì)象模型是應(yīng)用程序及其功能的概念圖。從編程角度而言,F(xiàn)older 對(duì)象可以包含任意類型的項(xiàng)目對(duì)象,但通常 Outlook 用戶界面

7、中的幾個(gè)文件夾都主要由特定類型的項(xiàng)目對(duì)象組成。例如,Outlook 用戶界面提供一個(gè)主要包含 ContactItem 對(duì)象的“聯(lián)系人”文件夾,和一個(gè)主要包含 AppointmentItem 和 MeetingItem 對(duì)象的“日歷”文件夾。對(duì)象的定義稱為類,因此您可能會(huì)看到互換使用這兩個(gè)術(shù)語(yǔ)的情況。從技術(shù)上講,類是用于創(chuàng)建或?qū)嵗?對(duì)象的說(shuō)明或模板。只要對(duì)象存在,便可通過(guò)設(shè)置其屬性 和調(diào)用其方法 來(lái)處理該對(duì)象。如果您認(rèn)為對(duì)象是一個(gè)名詞,則屬性是描述該名詞的形容詞,方法是為名詞賦予行動(dòng)的動(dòng)詞。更改屬性會(huì)更改對(duì)象的外觀或行為的質(zhì)量。調(diào)用對(duì)象的一個(gè)方法可使對(duì)象執(zhí)行某個(gè)操作。在了解 Outlook 中

8、對(duì)象模型的基本布局以及 Application、Explorer 和 Folder 對(duì)象的一些關(guān)鍵屬性(允許您訪問(wèn)當(dāng)前狀態(tài))后,便可以開(kāi)始使用 VBA 擴(kuò)展和處理 Outlook 了。宏和 Visual Basic 編輯器既然您已了解 Outlook 2010 應(yīng)用程序如何公開(kāi)其對(duì)象模型,可能已等不及要嘗試調(diào)用對(duì)象方法、設(shè)置對(duì)象屬性以及響應(yīng)對(duì)象事件。為此,您必須在一個(gè)位置以 Office 可以理解的方法編寫代碼;通常使用是 Visual Basic 編輯器。盡管該編輯器是在默認(rèn)情況下安裝的,但在功能區(qū)中啟用該編輯器之前,許多用戶都不知道該編輯器的存在。打開(kāi)“開(kāi)發(fā)工具”選項(xiàng)卡所有 Office

9、2010 應(yīng)用程序都使用功能區(qū)。功能區(qū)中有一個(gè)“開(kāi)發(fā)工具”選項(xiàng)卡,在此可以訪問(wèn) Visual Basic 編輯器和其他開(kāi)發(fā)人員工具。由于 Office 2010 在默認(rèn)情況下不顯示“開(kāi)發(fā)工具”選項(xiàng)卡,因此必須使用以下過(guò)程啟用該選項(xiàng)卡:?jiǎn)⒂谩伴_(kāi)發(fā)工具”選項(xiàng)卡1. 在“文件”選項(xiàng)卡上,選擇“選項(xiàng)”打開(kāi)“Outlook 選項(xiàng)”對(duì)話框。2. 單擊該對(duì)話框左側(cè)的“自定義功能區(qū)”。3. 在該對(duì)話框左側(cè)的“從下列位置選擇命令”下,選擇“常用命令”。4. 在該對(duì)話框右側(cè)的“自定義功能區(qū)”下,選擇“主選項(xiàng)卡”,然后選中“開(kāi)發(fā)工具”復(fù)選框。5. 單擊“確定”。注釋:在 Office 2007 中,顯示“開(kāi)發(fā)工具”

10、選項(xiàng)卡的方法是單擊 Office 按鈕、單擊“選項(xiàng)”,然后在“選項(xiàng)”對(duì)話框中的“常用”類別下選中“在功能區(qū)顯示開(kāi)發(fā)工具選項(xiàng)卡”復(fù)選框。啟用“開(kāi)發(fā)工具”選項(xiàng)卡后,可以輕松找到“Visual Basic”和“宏”按鈕。圖 1. Outlook 2010 中的“開(kāi)發(fā)工具”選項(xiàng)卡安全問(wèn)題默認(rèn)情況下,為了使您免受病毒和其他惡意代碼的侵害,Outlook 中會(huì)禁用 VBA 宏。若要啟用這些宏,請(qǐng)使用以下過(guò)程:?jiǎn)⒂煤?. 在“文件”選項(xiàng)卡上,選擇“Outlook 選項(xiàng)”打開(kāi)“Outlook 選項(xiàng)”對(duì)話框,然后單擊“信任中心”。2. 單擊“信任中心設(shè)置”,然后單擊左側(cè)的“宏設(shè)置”選項(xiàng)。3. 選擇“為所有宏提供

11、通知”,然后單擊“確定”。該選項(xiàng)允許在 Outlook 中運(yùn)行宏,但在宏運(yùn)行之前,Outlook 會(huì)提示您確認(rèn)是否要運(yùn)行宏。4. 重新啟動(dòng) Outlook 以使配置更改生效。Visual Basic 編輯器在顯示“開(kāi)發(fā)工具”選項(xiàng)卡后,可以打開(kāi) Visual Basic 編輯器,該編輯器是用于編寫和編輯用于 Outlook 的 VBA 代碼的內(nèi)置工具。使用以下過(guò)程可以打開(kāi) Visual Basic 編輯器:打開(kāi) Visual Basic 編輯器1. 單擊“開(kāi)發(fā)工具”選項(xiàng)卡上的“宏”按鈕。2. 在隨后出現(xiàn)的“宏”對(duì)話框中的“宏名稱”下鍵入 Test。3. 單擊“創(chuàng)建”按鈕打開(kāi) Visual Bas

12、ic 編輯器,其中包含已鍵入的新宏的大綱。Visual Basic 編輯器包含下列代碼。VBASub Test()End SubSub 代表“Subroutine”(子例程),可將其暫時(shí)定義為“宏”。運(yùn)行 Test 宏將運(yùn)行 Sub Test() 與 End Sub 之間的所有代碼?,F(xiàn)在,請(qǐng)編輯宏,使其類似如下代碼。VBASub Test() MsgBox("Hello world")End Sub圖 2. 在 Visual Basic 編輯器中測(cè)試宏注意 Visual Basic 編輯器的左面板。Test 宏位于 Project1 的 Module1 中。一個(gè)項(xiàng)目模塊包含

13、多個(gè)模塊,每個(gè)模塊包含可以作為 .bas 文件導(dǎo)入或?qū)С龅?VBA 代碼的集合。只要對(duì)象存在,便可通過(guò)設(shè)置其屬性 和調(diào)用其方法 來(lái)處理該對(duì)象。您編輯過(guò)的子例程中包含一個(gè)方法,該方法是用于執(zhí)行操作的代碼。該子例程中的 Test() 方法現(xiàn)在是對(duì)象 Project1 的一個(gè)成員。 注釋:其他 Office 應(yīng)用程序可能會(huì)在 Visual Basic 編輯器中列出多個(gè)項(xiàng)目,但在 Outlook VBA 中,只列出一個(gè)項(xiàng)目,并且該項(xiàng)目始終名為 Project1。返回到 Outlook 中的“開(kāi)發(fā)工具”選項(xiàng)卡,再次單擊“宏”按鈕。在隨后出現(xiàn)的列表中選擇“Project1.Test”宏,然后單擊“運(yùn)行”顯

14、示包含文本“Hello, world!”的小消息框。祝賀您!您剛剛在 Outlook 中創(chuàng)建并實(shí)現(xiàn)了 VBA 代碼!在消息框中單擊“確定”關(guān)閉消息框并完成宏的運(yùn)行。如果未出現(xiàn)消息框,請(qǐng)檢查宏安全性設(shè)置并重新啟動(dòng) Outlook。使宏可供訪問(wèn)如果您經(jīng)常使用宏,可能會(huì)發(fā)現(xiàn)用鍵盤快捷方式或“快速訪問(wèn)工具欄”按鈕訪問(wèn)宏更為方便。若要在“快速訪問(wèn)工具欄”中為“Test”宏創(chuàng)建按鈕,請(qǐng)使用以下過(guò)程:在“快速訪問(wèn)工具欄”中為宏創(chuàng)建按鈕1. 單擊“文件”選項(xiàng)卡。2. 單擊“選項(xiàng)”打開(kāi)“Outlook 選項(xiàng)”對(duì)話框,然后單擊“快速訪問(wèn)工具欄”。3. 在“從下列位置選擇命令:”下的列表中,選擇“宏”。在隨后出現(xiàn)的

15、列表中查找類似于“Project1.Module1.Test”的文本,并選擇該文本。 4. 單擊“添加 >>”按鈕將宏添加到右側(cè)的列表中,然后單擊“修改”按鈕選擇與該宏關(guān)聯(lián)的按鈕圖像。 5. 單擊“確定”。現(xiàn)在,您應(yīng)在“快速訪問(wèn)工具欄”中的“文件”選項(xiàng)卡上方看到新按鈕。 現(xiàn)在,您不必使用“開(kāi)發(fā)工具”選項(xiàng)卡,便可隨時(shí)快速運(yùn)行宏,趕快試試吧。圖 3. 向快速訪問(wèn)工具欄分配宏聯(lián)系人編輯宏假設(shè)您在名為 Example Systems 的公司中有多個(gè)聯(lián)系人,每個(gè)聯(lián)系人的電子郵件地址都包含 域?,F(xiàn)在,假定 Example Networks 收購(gòu)了 Example Systems,并將所有員工的

16、電子郵件地址更改為 。如果您只有一個(gè)或兩個(gè)聯(lián)系人在 Example Systems,則手動(dòng)更改這些地址是很簡(jiǎn)單的工作。但如果有 20、50 或 100 個(gè)聯(lián)系人,則自動(dòng)執(zhí)行此類重復(fù)性任務(wù)便是 VBA 在 Office 中的常見(jiàn)用途了。 本文探討如何使用 Outlook 中的 VBA 修改聯(lián)系人,還對(duì)一些 VBA 概念做了解釋。訪問(wèn)聯(lián)系人文件夾按照您創(chuàng)建 Test 宏時(shí)使用的步驟創(chuàng)建名為 CompanyChange 的新宏并在 Visual Basic 編輯器中打開(kāi)該宏。 第一個(gè)任務(wù)是在 Outlook 中訪問(wèn)“聯(lián)系人”文件夾對(duì)象,然后將對(duì)該對(duì)象的引用存儲(chǔ)在一個(gè)變量中。在編程中,變量是一個(gè)臨時(shí)的

17、命名對(duì)象,可保存值或?qū)?duì)象的引用。下面的示例代碼使用一個(gè)名為 ContactsFolder 的變量。該代碼指示 VBA,它將把一個(gè) Folder 對(duì)象放入其中并運(yùn)行 Session 對(duì)象的 GetDefaultFolder 方法,以查找 Contacts 文件夾并將對(duì)它的引用存儲(chǔ)在該變量中。Visual Basic 編輯器中包含一種有幫助的自動(dòng)代碼條目,名為“智能感知”。在鍵入 Session.GetDefaultFolder 時(shí)要仔細(xì)查看,然后按下左括號(hào)作為其參數(shù)。在執(zhí)行此操作期間,Visual Basic 編輯器會(huì)顯示選項(xiàng)列表。使用下拉箭頭或鼠標(biāo)選擇 olFolderContacts(這是

18、一種可用的文件夾類型),然后按下 Tab 鍵將其選中。圖 4. 使用“智能感知”選取文件夾類型雖然在處理代碼時(shí)使用復(fù)制和粘貼功能是可以有效避免鍵入錯(cuò)誤的極好做法,但直接在 Visual Basic 編輯器中鍵入代碼可以親自體驗(yàn)編輯器對(duì)您有何幫助。VBASub CompanyChange() Dim ContactsFolder as Folder Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)End Sub再添加一行,以獲取一些反饋并在宏的運(yùn)行過(guò)程中測(cè)試宏。(而且可以像在“使宏可供訪問(wèn)”一節(jié)中那樣,花一分鐘的時(shí)間為

19、 CompanyChange 創(chuàng)建一個(gè)“快速訪問(wèn)工具欄”按鈕。)VBASub CompanyChange() Dim ContactsFolder as Folder Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts) MsgBox ("Contacts Found: " & )End SubItems 是 Folder 對(duì)象的一個(gè)屬性,Count 是 Items 屬性的一個(gè)屬性。運(yùn)行宏;Outlook 中的聯(lián)系人數(shù)應(yīng)出現(xiàn)在消息框中。 如果尚未執(zhí)行此操作,請(qǐng)打開(kāi)“聯(lián)系人”文件夾,創(chuàng)建一些為虛

20、構(gòu)的 Example Systems 公司工作的示例聯(lián)系人。為每個(gè)示例聯(lián)系人給定公司名稱 Example Systems,并為每個(gè)聯(lián)系人創(chuàng)建一個(gè)與 相似的不同電子郵件地址。對(duì)象集合集合 是現(xiàn)代編程語(yǔ)言(如 VBA)中最強(qiáng)大的功能之一。集合 是可以存儲(chǔ)在屬性中的一組對(duì)象,通過(guò)輕松“演練”可以訪問(wèn)每個(gè)對(duì)象。在該示例中,代碼必須遍歷聯(lián)系人的集合以查找 Example Systems 的人員。如上所述,ContactsFolder 變量可提供對(duì) Folder 的 Items 集合的訪問(wèn)權(quán)限。聯(lián)系人 Folder 的 Items 集合將返回 ContactItem 類型的對(duì)象。創(chuàng)建一個(gè)變量,來(lái)保存對(duì)每個(gè)

21、 ContactItem 的引用。VBADim Contact As ContactItem請(qǐng)注意,如果您不知道從集合中返回何種類型的對(duì)象,也可以使用通用 Object 類型。但如果您知道對(duì)象的類型,精確指定類型有許多優(yōu)點(diǎn)。VBADim Contact As Object在擁有 ContactItem 后,必須檢查每個(gè)人的公司名稱。由于 ContactItem 對(duì)象用于存儲(chǔ)有關(guān)聯(lián)系人的信息,因此必須存在一個(gè)用于存儲(chǔ)公司名稱的屬性,但由于您不知道該屬性的名稱,因此必須使用下列兩種方法之一來(lái)查找該名稱。確定屬性名稱為了在 VBA 中充分利用對(duì)象,必須了解其屬性和方法。雖然使用在 Web 中找到的示

22、例代碼可以執(zhí)行許多任務(wù),但您可以通過(guò)系統(tǒng)地檢查所使用的對(duì)象來(lái)增加選項(xiàng)、減少調(diào)試和節(jié)省時(shí)間。例如,您可以通過(guò)在代碼中選擇 ContactItem 并按下 F1 來(lái)在“幫助”的“Outlook 開(kāi)發(fā)人員參考”中查找有關(guān) ContactItem 的信息,也可以在“幫助”中搜索 ContactItem。請(qǐng)務(wù)必研究各個(gè)主題中的鏈接,以深入了解相關(guān)對(duì)象。 “開(kāi)發(fā)人員參考”是用于 VBA 編程的強(qiáng)大工具,也是查找您的代碼所需屬性的一種方法。在閱讀有關(guān) ContactItem 對(duì)象的一般信息后,可單擊“ContactItem 對(duì)象成員”鏈接查看方法和屬性的列表(屬性和方法統(tǒng)稱為成員)。如果您繼續(xù)查看該列表,您

23、會(huì)看到一個(gè) CompanyName 屬性。此屬性聽(tīng)起來(lái)似乎很有用。除了使用“Outlook 開(kāi)發(fā)人員參考”查找屬性或方法外,還可以使用 Visual Basic 編輯器中的智能感知功能。在將變量 Contact 定義為 ContactItem 后,鍵入 Contact 和句點(diǎn)可以顯示與“幫助”中所列內(nèi)容相同的成員列表。若要選擇一個(gè)智能感知選項(xiàng),請(qǐng)使用向上和向下箭頭或鼠標(biāo)突出顯示該選項(xiàng),然后使用 Tab 鍵將其選中。智能感知不提供各個(gè)成員的說(shuō)明,因此當(dāng)上下文使您的選擇很明顯或您已了解成員的名稱但無(wú)法記住其準(zhǔn)確拼寫時(shí),使用此方法將很有幫助。成員名稱拼寫錯(cuò)誤會(huì)產(chǎn)生 Visual Basic 編輯器在

24、您運(yùn)行宏之前一直無(wú)法標(biāo)記的錯(cuò)誤。循環(huán)訪問(wèn)集合現(xiàn)在,您有一個(gè)集合,您了解該集合中包含的對(duì)象類型,并且要訪問(wèn)找到的對(duì)象中的一個(gè)屬性。您已準(zhǔn)備好要使用 For Each 循環(huán)來(lái)遍歷集合并處理它所包含的對(duì)象。 在偽代碼 中,您準(zhǔn)備執(zhí)行下列操作。VBAFor Each object variable in a collection that contains that type of objectdo something with object variable.PropertyNext在實(shí)際代碼中,上述代碼轉(zhuǎn)換為下列代碼,其中涉及包含 MsgBox 語(yǔ)句的行。VBAFor Each Contact I

25、n ContactsFolder.Items Debug.Print Contact.CompanyNameNext再次運(yùn)行宏之前,請(qǐng)?jiān)?Visual Basic 編輯器中打開(kāi)立即窗口。為此,請(qǐng)?jiān)诓藛螜谥袉螕簟耙晥D”,然后單擊“立即窗口”。前面,您使用 MsgBox 從腳本中獲取反饋。雖然 MsgBox 很有用,但它總是等待您單擊“確定”,然后才顯示下一條消息。相反,Debug.Print 每次都向立即窗口發(fā)送一行輸出,而不等待您確認(rèn)。運(yùn)行此腳本后,您應(yīng)該能夠在立即窗口中看到公司名稱的列表。注意,該列表對(duì)于開(kāi)發(fā)人員非常有用,但與您共享此宏的用戶看不到該列表。使用 If 語(yǔ)句做決定在您已完成的解

26、決方案中,您希望宏只更改在 Example Systems 工作的聯(lián)系人,而不更改其他聯(lián)系人。這種條件邏輯正是編程的優(yōu)勢(shì)所在。這里,您可以使用 If 語(yǔ)句告知 VBA 僅在所提供條件為真時(shí)運(yùn)行代碼;否則,它應(yīng)跳到 End If 語(yǔ)句之后的代碼。VBAIf some condition is true Then' do thingsEnd If' continue on whether or not the condition was true在您所處理的問(wèn)題中,決定條件是當(dāng)前 ContactItem 的 CompanyName 屬性是否設(shè)置為字符串“Example System

27、s”。在下面的代碼中,請(qǐng)注意雙引號(hào)。字符串值(即文本值)與數(shù)字值相反,始終包含在雙引號(hào)內(nèi)。VBA 忽略單引號(hào),單引號(hào)用于您和其他開(kāi)發(fā)人員的注釋中。 在代碼中添加條件,使完整腳本類似于如下代碼。VBASub CompanyChange() Dim ContactsFolder As Folder Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts) MsgBox ("Contacts Found:" & ) Dim Contact As ContactItem For Each Contact

28、In ContactsFolder.Items If Contact.CompanyName = "Example Systems" Then Debug.Print "Found: " & Contact.FullName End If NextEnd Sub運(yùn)行代碼后,應(yīng)在立即窗口中看到 Example Systems 聯(lián)系人的姓名。 圖 6. 使用立即窗口進(jìn)行輸出注意 Debug.Print 和前面的 MsgBox 為了清晰起見(jiàn)而合并已修復(fù)字符串的方法,例如 "Found: " 后跟屬性返回的值。為使此方法起作用,必須使

29、用字符串連接運(yùn)算符 (&) 來(lái)合并這兩個(gè)文本字符串。重要信息:重要信息:在繼續(xù)此教程的過(guò)程中,請(qǐng)務(wù)必謹(jǐn)慎。您使用的是實(shí)際的 Outlook 聯(lián)系人列表,其中包含幾個(gè)來(lái)自 Example Systems 的虛構(gòu)聯(lián)系人。將每個(gè)聯(lián)系人的公司名稱都修改為“Example Networks”并不合適。 更改公司名稱該操作已接近尾聲。您已經(jīng)加載了聯(lián)系人,現(xiàn)在可以循環(huán)訪問(wèn)這些聯(lián)系人并將您的聯(lián)系人與來(lái)自 Example Systems 的聯(lián)系人相區(qū)分。若要對(duì) Example Networks 進(jìn)行更改,您可以更改 CompanyName 屬性并調(diào)用 Save 方法來(lái)提交更改。VBA If Contac

30、t.CompanyName = "Example Systems" Then Contact.CompanyName = "Example Networks" Contact.Save Debug.Print "Changed: " & Contact.FullName End If運(yùn)行宏,然后查看 Example Systems 聯(lián)系人;現(xiàn)在,這些聯(lián)系人的公司名稱應(yīng)該已改為 Example Networks。請(qǐng)注意,為了以后測(cè)試腳本,必須手動(dòng)將公司名稱更改回 Example Systems 或創(chuàng)建可為您執(zhí)行該更改的另一個(gè)宏。

31、 雖然 Debug.Print 語(yǔ)句不是腳本運(yùn)行所必需的語(yǔ)句,但請(qǐng)將其保留。您和您的用戶從宏中獲取的反饋越多越好。更改電子郵件地址更改 CompanyName 屬性只是簡(jiǎn)單更改整個(gè)字符串。若要將電子郵件地址的域由 更改為 ,需要執(zhí)行字符串操作。每個(gè)字符串都有一個(gè)內(nèi)置的編號(hào)系統(tǒng),其中每個(gè)字符都有一個(gè)從 1 開(kāi)始的索引號(hào)。您可以使用各種 VBA 函數(shù)來(lái)處理部分或全部字符串。由于存在許多需要檢查子字符串或更改部分字符串的編程情況,因此了解這些字符串操作可顯著增加您作為 VBA 程序員時(shí)的選擇。(在 Web 中搜索“VBA 字符串函數(shù)”可提供許多有用的列表和示例。)可以使用 Replace 函數(shù)來(lái)執(zhí)行

32、將一個(gè)子字符串替換為另一個(gè)子字符串的簡(jiǎn)單替換,但您可能經(jīng)常會(huì)面臨需要用更復(fù)雜的代碼來(lái)處理字符串的情況。在緊鄰代碼之前的位置添加下面的行,將調(diào)用 Contact.Save。VBAContact.Email1Address = Replace(Contact.Email1Address, "", "")請(qǐng)從左至右認(rèn)真閱讀代碼。該代碼指示將聯(lián)系人的 Email1Address 屬性(第一個(gè)電子郵件地址)設(shè)置為新值。提供新值的方法是讓 Replace 函數(shù)在當(dāng)前的 Contact.Email1Address 屬性中查找字符串“”并將其替換為“”。確保虛構(gòu)聯(lián)系人的

33、公司名稱已設(shè)置為 Example Systems,然后運(yùn)行該腳本。電子郵件地址應(yīng)全都更改為 ,公司名稱應(yīng)全都更改為 Example Networks。使代碼通用現(xiàn)在,您有一個(gè)強(qiáng)大的宏,但功能有限,因?yàn)橹付ㄐ鹿久Q的唯一方法是編輯代碼。若要使您的代碼更加有用,可以使用 InputBox 函數(shù)提示用戶輸入。下列代碼是最終腳本。這是一個(gè)有用并且完整的 Outlook 解決方案。VBASub CompanyChange() Dim ContactsFolder As Folder Set ContactsFolder = Session.GetDefaultFolder(olFolderContac

34、ts) Dim OldCompanyName As String Dim NewCompanyName As String Dim OldEmailDomain As String Dim NewEmailDomain As String Dim ContactsChangedCount As Integer ' Ask user for inputs MsgBox ("This script will change all of your contacts from one company to another.") OldCompanyName = InputB

35、ox("Under what name are the contacts listed in Outlook now?") NewCompanyName = InputBox("What is the new company name to set them to?") OldEmailDomain = InputBox("What is the e-mail domain name currently listed after the sign? e.g. ") NewEmailDomain = InputBox("Wha

36、t should the e-mail domain be set to? Leave blank and click OK if no change") ContactsChangedCount = 0 Dim Contact As ContactItem ' loop through Contacts and set those who need it For Each Contact In ContactsFolder.Items If Contact.CompanyName = OldCompanyName Then Contact.CompanyName = New

37、CompanyName If NewEmailDomain <> "" Then Contact.Email1Address = Replace(Contact.Email1Address, OldEmailDomain, NewEmailDomain) End If Contact.Save ContactsChangedCount = ContactsChangedCount + 1 Debug.Print "Changed: " & Contact.FullName End If Next ' confirm and c

38、lean up MsgBox (ContactsChangedCount & " contacts were changed from '" & OldCompanyName & "' to '" & NewCompanyName) Set Contact = Nothing Set ContactsFolder = NothingEnd Sub分發(fā)代碼從開(kāi)發(fā)所在計(jì)算機(jī)向其他計(jì)算機(jī)移動(dòng)代碼的過(guò)程被稱為部署,這是編程項(xiàng)目的一個(gè)重要部分。本節(jié)介紹如何將新宏移動(dòng)到其他計(jì)算機(jī)中。首先需要一個(gè)小型后臺(tái)。Outlook Visual Basic for Applications 代碼設(shè)計(jì)用作個(gè)人宏開(kāi)發(fā)環(huán)境;并非設(shè)計(jì)用于部署或分發(fā)。因此,無(wú)法像處理其他 Office 應(yīng)用程序(如 Excel 或 Word)那樣在文檔內(nèi)保存宏。若要將 Outlook VBA 宏從一臺(tái)計(jì)算機(jī)移至另一臺(tái)計(jì)算機(jī),可從第一臺(tái)計(jì)算機(jī)中導(dǎo)出代碼模塊并將其導(dǎo)入第二臺(tái)計(jì)算機(jī)。也可以使用 Visual Basic 編輯器將項(xiàng)目的源代碼復(fù)制并粘貼到第二臺(tái)計(jì)算機(jī)上的 Project1 中。 如果您開(kāi)發(fā)的解決方案要分發(fā)給多人,則應(yīng)將 V

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論