Share via


Outlook 2010 的 VBA 快速入門

**摘要:**本文為非程式設計師介紹一些使用 Visual Basic for Applications (VBA) 程式設計來擴充 Microsoft Outlook 2010 的方式。本主題包括 VBA 語言概觀、如何在 Outlook 2010 中存取 VBA 的指示、實際 Outlook VBA 程式設計問題的詳細解決方案,以及程式設計和偵錯的提示。(13 張列印頁面)

**Applies to:**Office 2010 | Outlook 2010 | VBA

In this article
Outlook 2010 中的 VBA 程式設計
VBA 程式設計 101
巨集與 Visual Basic 編輯器
讓巨集可供存取
連絡人編輯巨集
散佈程式碼
摘要
其他資源

適用於:  Microsoft Outlook 2010

發佈日期:   2009 年 11 月

提供者:  Kingfisher Computer Consulting 的 Tim Burnett

內容

  • Outlook 2010 中的 VBA 程式設計

  • VBA 程式設計 101

  • 巨集與 Visual Basic 編輯器

  • 連絡人編輯巨集

  • 散佈程式碼

  • 摘要

  • 其他資源

Outlook 2010 中的 VBA 程式設計

您需要不斷清理 Outlook 2010 中的多個連絡人嗎?您被大量湧入、必須一一儲存至硬碟的電子郵件附件給淹沒了嗎?您想要自動從特定電子郵件訊息建立行事曆項目嗎?您搞不清楚如何有效率地將 Microsoft Outlook 2010 中的連絡人匯入 Microsoft Excel 2010 試算表嗎?

使用 Visual Basic for Applications (VBA),可讓您執行這些工作並完成更多;VBA 是一種簡單但功能強大的程式設計語言,可用來擴充 Office 2010 應用程式的新功能,以及自動化重複的工作。

本文適用於想要了解 VBA,以及想要深入了解程式設計如何幫助修改 Outlook 2010 以符合其需求的 Outlook 進階使用者。

在閱讀本文之前,您可能會想要先閱讀介紹文章<Office 2010 的 VBA 快速入門>,其中有 VBA 程式設計基本知識更詳細的資訊。

在 Office 2010 中進行 VBA 程式設計的一大優勢,就是幾乎所有可以用滑鼠、鍵盤或對話方塊執行的作業,也都可以用 VBA 來完成。此外,只要可以用 VBA 執行一次,就可以同樣輕鬆地執行一百次或一千次。(事實上,自動化重複工作是 Office 中最常見的 VBA 用法。)

除了以 VBA 指令碼加速日常工作的功能,您還可以利用 VBA 將新功能加入 Office 2010 應用程式,或是以業務所需的特定方式來提示文件的使用者並與其互動。例如,在 Outlook 2010 中,使用 VBA 可讓您以標準使用者介面中所沒有的方式來排序、匯出及修改連絡人、電子郵件、行事曆項目或工作。

本文中的教學課程會使用 VBA 來自動化 Outlook。其為真實範例,探討可供您 (Outlook 進階使用者) 使用的程式設計、VBA 及開發工具。

選擇方法

VBA 程式設計雖然是強大的解決方案,但不一定是最佳的方法,有時會比較適合使用其他方式來達成您的目標。

所要問的關鍵問題在於是否有更簡單的方法。在您開始 VBA 專案之前,請考慮使用內建工具和標準功能。例如,如果您在 Outlook 中有一項耗時的作業,請考慮使用「規則」來解決。您可以執行一次工作,然後使用 CTRL+Y (重做) 來重複工作嗎?

Outlook 2010 是功能強大的應用程式;其可能已包含您所需要的方案。請花點時間進一步了解 Outlook 2010,再開始進行程式設計。

在開始 VBA 專案之前,請確定有時間處理 VBA。程式設計需要專注,而且可能出乎意料。尤其是新手,除非您有時間仔細地琢磨,否則絕不要轉向程式設計。在期限將屆時嘗試撰寫「快速指令碼」來解決問題,壓力會很大。如果您在趕時間,請使用較傳統的方法,即使是單調且重複的工作也一樣。

VBA 程式設計 101

使用程式碼讓應用程式工作

您可能以為撰寫程式碼很神秘或很難,但基本原則是使用日常推論,而且相當容易存取。Office 2010 應用程式的建立方式是公開稱為「物件」的東西來接收指示,就好像在電話上設計按鈕,讓您用來與電話互動。當您按下按鈕,電話就會辨識指示,並以您撥打的順序來包含相對應的號碼。在程式設計的世界中,您與應用程式互動的方式是將指示傳送到應用程式中的各種「物件」。這些物件很廣泛,但有其限制,只能執行所設計的工作,而且只會執行您指示其執行的工作。

例如,想想使用者在 Outlook 中建立電子郵件訊息、選取收件者、輸入郵件主旨,然後按一下 [傳送]。在 VBA 程式設計的世界中,Outlook 會公開 MailItem 物件。您使用 VBA 程式碼來設定 MailItem 的 [主旨] 和 [內文],並指示其 [儲存]或 [傳送]。請閱讀本文,以進一步了解這些物件、其組織方式,以及其描述和操作方式。

物件、方法和屬性

開發人員以階層來組織程式設計物件,而該階層稱為應用程式的「物件模型」。例如,Outlook 中的 [收件匣] 是存在於 Outlook Namespace 物件中的 Folder 物件。Folder 物件包含 MailItem 物件等等。物件模型大體上反映出您在使用者介面中看到的樣貌。物件模型是應用程式及其功能的概念對應。以程式設計方式,Folder 物件可以包含任何類型的項目物件,但是通常 Outlook 使用者介面中的每個資料夾顯然都包含特定類型的項目物件。例如,Outlook 使用者介面提供 [連絡人] 資料夾,其中主要包含 ContactItem 物件,以及主要包含 AppointmentItem 和 MeetingItem 物件的 [行事曆] 資料夾。

物件的定義稱為「類別」,所以您可能會看到這兩個術語交替使用。在技術層面上,類別是用來建立或「執行個體化」物件的描述或範本。

只要物件存在,您就可以設定其「屬性」並呼叫其「方法」來進行操作。如果您將物件當作名詞,屬性就是描述名詞的形容詞,而方法是賦予名詞動作的動詞。變更屬性會變更物件外觀或行為的某些品質。呼叫其中一個物件的方法,會使該物件執行某些動作。

了解物件模型在 Outlook 中的基本配置,以及可讓您存取目前狀態之 Application、Explorer 和 Folder 物件的部分重要屬性之後,您就可以開始用 VBA 來擴充及操作 Outlook。

巨集與 Visual Basic 編輯器

現在您已經知道 Outlook 2010 應用程式如何公開其物件模型,可能會迫不及待嘗試呼叫物件方法、設定物件屬性,以及回應物件事件。若要這麼做,您必須在 Office 了解的地方,以 Office 了解的方式來撰寫程式碼;通常是使用 Visual Basic 編輯器。雖然是依預設安裝,但是很多使用者都不知道即使在功能區上啟用之前亦可使用。

開啟開發人員索引標籤

所有 Office 2010 應用程式都使用功能區。功能區上有一個索引標籤是 [開發人員] 索引標籤,可讓您存取 Visual Basic 編輯器和其他開發人員工具。因為依預設 Office 2010 不會顯示 [開發人員] 索引標籤,所以您必須使用下列程序來加以啟用:

啟用開發人員索引標籤

  1. 在 [檔案] 索引標籤上選擇 [選項],以開啟 [Outlook 選項] 對話方塊。

  2. 按一下對話方塊左側的 [自訂功能區]。

  3. 在對話方塊左側的 [由此選擇命令] 底下,選取 [常用命令]。

  4. 在對話方塊右側的 [自訂功能區] 底下,選取 [主要索引標籤],然後選取 [開發人員] 核取方塊。

  5. 按一下 [確定]。

注意

若要在 Office 2007 中顯示 [開發人員] 索引標籤,請按一下 [Office] 按鈕,再按一下 [選項],然後在 [選項] 對話方塊的 [常用] 類別中選取 [在功能區中顯示開發人員索引標籤] 核取方塊。

啟用 [開發人員] 索引標籤之後,即可輕鬆尋找 [Visual Basic] 和 [巨集] 按鈕。

圖 1. Outlook 2010 中的 [開發人員] 索引標籤

Outlook 2010 的 [開發人員] 索引標籤

安全性問題

依預設,Outlook 會停用 VBA 巨集,以防止病毒和其他惡意程式碼。若要啟用巨集,請使用下列程序:

啟用巨集

  1. 在 [檔案] 索引標籤上選擇 [Outlook 選項],以開啟 [Outlook 選項] 對話方塊,然後按一下 [信任中心]。

  2. 按一下 [信任中心設定],然後按一下左邊的 [巨集設定] 選項。

  3. 選取 [所有巨集都顯示通知],然後按一下 [確定]。此選項可讓巨集在 Outlook 中執行,但是在巨集執行之前,Outlook 會提示您確認您要執行巨集。

  4. 重新啟動 Outlook,讓設定變更生效。

Visual Basic 編輯器

在顯示 [開發人員] 索引標籤之後,您可以開啟 Visual Basic 編輯器,這是內建工具,可讓您用來撰寫和編輯 Outlook 的 VBA 程式碼。請使用下列程序來開啟 Visual Basic 編輯器:

開啟 Visual Basic 編輯器

  1. 按一下 [開發人員] 索引標籤上的 [巨集] 按鈕。

  2. 在出現的 [巨集] 對話方塊中的 [巨集名稱] 底下,輸入 Test。

  3. 按一下 [建立] 按鈕,以開啟 Visual Basic 編輯器,其中會有所輸入之新巨集的大綱。

Visual Basic 編輯器包含下列程式碼。

    Sub Test()
    End Sub

Sub 代表「副程式」,您現在可以將其定義為「巨集」。執行 Test 巨集會執行 Sub Test() 與 End Sub 之間的任何程式碼。

現在請編輯巨集,使它看起來如下列程式碼。

    Sub Test()
       MsgBox("Hello world")
    End Sub

圖 2. Visual Basic 編輯器中的 Test 巨集

測試 Visual Basic 編輯器中的巨集

請注意 Visual Basic 編輯器中左邊的面板。Test 巨集在 Project1 的 模組1 中。專案模組包含多個模組,而每個模組各包含一個 VBA 程式碼集合,可讓您匯入或匯出為 .bas 檔。

只要物件存在,您就可以設定其「屬性」並呼叫其「方法」來進行操作。您編輯的副程式包含一個方法,其為執行動作的程式碼。副程式中的 Test() 方法現在是物件 Project1 的成員。

注意

其他 Office 應用程式可能會有多個專案列在 Visual Basic 編輯器中,但是在 Outlook VBA 中,只會列出一個專案,而且一律名為 Project1。

回到 Outlook 中的 [開發人員] 索引標籤,再按一下 [巨集] 按鈕。在出現的清單中選取 [Project1.Test] 巨集,然後按一下 [執行],即顯示內文為 "Hello, world!" 的小訊息方塊。

恭喜!您剛才已在 Outlook 中建立及實作自訂 VBA 程式碼!按一下訊息方塊中的 [確定] 以關閉訊息,並結束執行巨集。

如果未出現訊息方塊,請檢查巨集安全性設定,並重新啟動 Outlook。

讓巨集可供存取

如果您經常使用巨集,可能會發現用鍵盤快速鍵或 [快速存取工具列] 按鈕來存取比較方便。

若要在 [快速存取工具列] 上建立 [Test] 巨集的按鈕,請使用下列程序:

在快速存取工具列上建立巨集的按鈕

  1. 按一下 [檔案] 索引標籤。

  2. 按一下 [選項] 以開啟 [Outlook 選項] 對話方塊,然後按一下 [快速存取工具列]。

  3. 在 [由此選擇命令:] 底下的清單中,選擇 [巨集]。在所出現的清單中尋找類似 Project1.Module1.Test 的文字,並選取該文字。

  4. 按一下 [新增 >>] 按鈕,將巨集新增至右側清單,再按一下 [修改…] 按鈕,選擇與該巨集相關的按鈕圖像。

  5. 按一下 [確定]。您應該會在 [檔案] 索引標籤上方的 [快速存取工具列] 上看到您的新按鈕。

現在您可以隨時快速執行巨集,而不需使用 [開發人員] 索引標籤了,快試一下。

圖 3. 指派巨集給快速存取工具列

將巨集指派給快速存取工具列

連絡人編輯巨集

假設您在名為 Example Systems 的指定公司中有多個連絡人,而且每個連絡人都有網域為 @example.com 的電子郵件地址。現在假設 Example Networks 併購 Example Systems,並且將所有員工的電子郵件地址變更為 @example.net。如果您只有一兩個連絡人在 Example Systems,手動變更是很簡單的。然而,如果您有 20、50 或 100 個連絡人,在 Office 中自動化這個重複工作是 VBA 的常見用法。

本文討論如何在 Outlook 中使用 VBA 來修改那些連絡人,並說明一些 VBA 概念。

存取連絡人資料夾

遵循您用來建立 Test 巨集的步驟,建立一個名為 CompanyChange 的新巨集,然後在 Visual Basic 編輯器中將它開啟。

首要工作是在 Outlook 中取得 [連絡人] 資料夾物件的存取權,然後將該物件的參照儲存在變數中。

在程式設計中,變數是暫時的具名物件,可容納一個值或物件的參照。下列程式碼範例使用名為 ContactsFolder 的變數。程式碼指示 VBA 其將放置 Folder 物件在其中,並執行 Session 物件的 GetDefaultFolder 方法,以尋找 Contacts 資料夾,並且在該變數中儲存其參照。

Visual Basic 編輯器包含一個名為 Intellisense 的有用自動程式碼項目。在輸入 Session.GetDefaultFolder 時請小心觀察,然後按左括弧以取得其參數。這麼做時,Visual Basic 編輯器會顯示選項清單。請使用向下鍵或滑鼠來選取 olFolderContacts (其中一個可用的資料夾類型),然後按 Tab 鍵加以選取。

圖 4. 使用 Intellisense 選取資料夾類型

使用 Intellisense 挑選資料夾類型

當您處理程式碼時,使用複製貼上來避免輸入錯誤的作法固然很好,但是現在請將程式碼輸入 Visual Basic 編輯器中,這樣您才能夠查看編輯器可以如何幫助您。

    Sub CompanyChange()
        Dim ContactsFolder as Folder
        Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
    End Sub

再新增一行,這樣您就可以取得一些反饋,並且在巨集進行中加以測試。(此外,也請花一點時間來為 CompanyChange 建立 [快速存取工具列] 按鈕,就像我們在<讓巨集可供存取>一節中所做的一樣。)

    Sub CompanyChange()
        Dim ContactsFolder as Folder
        Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
        MsgBox ("Contacts Found: " & ContactsFolder.Items.Count)
    End Sub

Items 是 Folder 物件的屬性,而 Count 是 Items 屬性的屬性。

執行巨集;您在 Outlook 中的連絡人數量應該會出現在訊息方塊中。

如果您尚未這麼做,請開啟 [連絡人] 資料夾,並建立一些為虛構之 Example Systems 公司工作的範例連絡人。將每個範例連絡人的公司命名為 Example Systems,並且為每個範例連絡人建立類似 someone@example.com 的不同電子郵件地址。

物件的集合

「集合」是現代程式設計語言 (如 VBA) 中最強大的功能。「集合」是一組物件,可以儲存在屬性中,而且很容易「逐一檢視」來加以存取。在此情況下,程式碼必須循環查看連絡人的集合,以從 Example Systems 尋找人員。

如前面提到的,ContactsFolder 變數可供存取資料夾的 Items 集合。[連絡人] 資料夾的 Items 集合會傳回 ContactItem 類型的物件。請建立變數來包含每個 ContactItem 的參照。

    Dim Contact As ContactItem

請注意,如果您不知道從集合傳回的物件類型為何,也可以使用一般用途的 Object 類型。然而,如果您知道物件類型為何,更明確地加以指定會有很多好處。

    Dim Contact As Object

在有了 ContactItem 之後,您必須檢查每個人的公司名稱。既然 ContactItem 物件儲存了連絡人的相關資訊,就一定會有公司名稱的屬性,但是由於您不知道該屬性的名稱,就必須使用下列兩種方式之一來尋找該名稱。

判定屬性名稱

若要完整利用 VBA 中的物件,您必須知道其屬性和方法。雖然從您在網路上找到的範例程式碼來處理,就可以執行許多工作,但是有系統地檢查您使用的物件,可以增加您的選項、減少偵錯,並節省時間。

例如,您可以選取程式碼中的 ContactItem,並按 F1 鍵,就可以在 [說明] 的 Outlook 開發人員參考中找到 ContactItem 的相關資訊。您也可以在 [說明] 中搜尋 ContactItem。請務必詳查各種主題中的連結,以探索相關物件。

開發人員參考是 VBA 程式設計的強大工具,也是尋找需要用於程式碼之屬性的方式之一。在閱讀 ContactItem 物件的一般資訊之後,按一下 [ContactItem 物件成員] 連結,以查看方法和屬性的清單 (屬性與方法統稱為「成員」)。

如果逐一檢視清單,您會發現有一個 CompanyName 屬性。一個具功能性的屬性。

除了使用 Outlook 開發人員參考來尋找屬性或方法,您可以使用 Visual Basic 編輯器中的 Intellisense。在將變數 Contact 定義為 ContactItem 之後,您可以輸入 Contact 和一個句點,以顯示 [說明] 中列出的相同成員清單。若要選取其中一個 Intellisense 選項,請使用向上鍵和向下鍵或滑鼠來醒目提示,然後使用 TAB 鍵加以選取。

Intellisense 沒有提供各種成員的描述,因此當上下文讓您的選項顯而易見,或是您已經知道成員名稱,但不記得確切的拼法,以這個方式來使用是最有幫助的。拼錯成員名稱會導致 Visual Basic 編輯器不標幟的錯誤,直到您執行巨集為止。

循環查看集合

您現在有一個集合,您知道其中包含什麼物件類型,而且您有可存取所找到物件的屬性。您已經準備好使用 For Each 循環來循環查看集合及操作其包含的物件。

在「虛擬程式碼」 中,您已準備好執行下列作業。

    For Each [object variable] in [a collection that contains that type of object]
    [do something with] [object variable].Property
    Next

在實際程式碼中,會轉換成下列程式碼,其關係到有 MsgBox 陳述式的字行。

    For Each Contact In ContactsFolder.Items
       Debug.Print Contact.CompanyName
    Next

在重新執行巨集之前,請先開啟 Visual Basic 編輯器中的 [即時運算] 視窗。若要這麼做,請按一下功能表列上的 [檢視],然後按一下 [即時運算視窗]。您先前使用 MsgBox 來取得指令碼的反饋。雖然 MsgBox 很有用,但必須等到您按一下 [確定],才會顯示下一則訊息。相對地,Debug.Print 會一次傳送一行輸出至 [即時運算] 視窗,無需等待。執行這個指令碼之後,您應該會在 [即時運算] 視窗中看到公司名稱清單。請注意,這對於身為開發人員的您才有用,與您共用此巨集的使用者並看不到。

以 IF 陳述式做決定

在完成的解決方案中,您想要讓巨集只變更為 Example Systems 工作的那些連絡人,而其他連絡人維持不變。那種條件式邏輯正是程式設計的耀眼之處。在這裡,您可以使用 If 陳述式來命令 VBA 只在符合所提供的條件時執行程式碼;否則,應該會跳至 End If 陳述式之後的程式碼。

    If [some condition is true] Then
    ' do things
    End If
    ' continue on whether or not the condition was true

在您處理的問題中,決定性的條件為目前 ContactItem 的 CompanyName 屬性是否設為字串 "Example Systems"。

在下列程式碼中,請注意雙引號。字串值 (也就是文字值,相對於數值) 一律以雙引號括住。VBA 會忽略單引號,那是供您自己和其他開發人員做為註解之用。

在您的程式碼中加入條件,使整個指令碼看起來如下列程式碼。

    Sub CompanyChange()
        Dim ContactsFolder As Folder
        Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
        MsgBox ("Contacts Found:" & ContactsFolder.Items.Count)
        
        Dim Contact As ContactItem
    
        For Each Contact In ContactsFolder.Items
            If Contact.CompanyName = "Example Systems" Then
                Debug.Print "Found: " & Contact.FullName
            End If
        Next
    End Sub

執行程式碼之後,應該會在 [即時運算] 視窗中看到 Example Systems 連絡人的名稱。

圖 6. 將 [即時運算] 視窗用於輸出

使用立即視窗進行輸出

請注意 Debug.Print 和先前 MsgBox 合併固定字串以求明確的方式,例如 "Found: " 後面接屬性傳回的值。若要讓此作業生效,您必須使用字串串連運算子 (&) 來合併那兩個文字字串。

重要

重要事項:繼續進行此教學課程時請小心謹慎。您將會處理您實際的 Outlook 連絡人清單,以及 Example Systems 的數個虛構連絡人。在每個連絡人中將公司名稱修改成 "Example Networks" 並非明智之舉。

變更公司名稱

您就快要完成了。您已載入連絡人,您可以加以循環查看,而且您可以將您的連絡人與 Example Systems 區分開來。若要對 Example Networks 進行變更,則要變更 CompanyName 屬性,並呼叫 Save 方法來確認變更。

        If Contact.CompanyName = "Example Systems" Then
            Contact.CompanyName = "Example Networks"
            Contact.Save
            Debug.Print "Changed: " & Contact.FullName
        End If

執行巨集,然後查看 Example Systems 的連絡人;那些連絡人中的公司名稱現在應該改成 Example Networks 了。請注意,若要進一步測試指令碼,您必須將公司名稱變更回 Example Systems,您可以手動變更,也可以建立另一個巨集來為您變更。

即使 Debug.Print 陳述式不是讓指令碼運作的必要因素,也請加以保留。您和您的使用者從巨集取得的反饋愈多愈好。

變更電子郵件地址

變更 CompanyName 屬性只是整個字串的簡單變更。將電子郵件地址的網域從 @example.com 變更為 @example.net 需要字串作業。每個字串都有內建的編號系統,其中每個字元都有從 1 開始的索引編號。您可以使用各種 VBA 函數來操作部分或整個字串。學習這些字串作業可以讓身為 VBA 程式設計師的您增加大量的選項,因為有很多程式設計狀況會需要您檢查子字串,或是變更字串的某部分。(在網路上搜尋 "VBA string 函數" (VBA 字串函數) 會提供許多有用的清單和範例。)

您可以使用 Replace 函數來執行簡單的子字串取代作業,但是您可能會經常面臨需要更複雜的編碼來操作字串的狀況。請在程式碼呼叫 Contact.Save 之前加入下列字行。

    Contact.Email1Address = Replace(Contact.Email1Address, "example.com", "example.net")

由左至右詳閱該程式碼。其表示要將連絡人的 Email1Address 屬性 (第一個電子郵件地址) 設為新值。該新值是藉由要求 Replace 函數查閱目前 Contact.Email1Address 屬性中的字串 "example.com" 並將其取代成 "example.net" 而得。

確定虛構連絡人中的公司名稱設為 Example Systems,然後執行指令碼。電子郵件地址應該會全部變更為 @example.net,而公司名稱應該會全部變更為 Example Networks。

一般化您的程式碼

您現在擁有功能強大的巨集,但其有所限制,因為指定新公司名稱的唯一方法是編輯程式碼。若要讓您的程式碼更能普遍使用,您可以使用 InputBox 函數來提示使用者輸入。

下列程式碼是最後的指令碼。其為有用且完整的 Outlook 解決方案。

    Sub CompanyChange()
        Dim ContactsFolder As Folder
        Set ContactsFolder = Session.GetDefaultFolder(olFolderContacts)
        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 = InputBox("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. mycompany.com")
        NewEmailDomain = InputBox("What 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 = NewCompanyName
                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 clean up
        MsgBox (ContactsChangedCount & " contacts were changed from '" & OldCompanyName & "' to '" & NewCompanyName)
        Set Contact = Nothing
        Set ContactsFolder = Nothing
    End Sub

散佈程式碼

將程式碼從其開發所在的電腦移至其他電腦的過程,即稱為「部署」,而這可以是程式設計專案很重要的一部分。本節將審視如何將新巨集移至其他電腦的方法。

首先介紹一點背景。Outlook Visual Basic for Applications 程式碼的設計是要作為個人巨集開發環境,而不是為了要部署或散佈。因此,沒有辦法像在其他 Office 應用程式 (如 Excel 或 Word) 那樣,將巨集儲存在文件中。

若要將 Outlook VBA 巨集從一部電腦移到另一部電腦,您可以從第一部電腦匯出程式碼模組,然後再匯入第二部電腦。您也可以使用 Visual Basic 編輯器,將專案的來源程式碼複製並貼上第二部電腦的 Project1。

如果您開發的解決方案是要散佈給很多人,則應將 Visual Basic for Applications 程式碼轉換成 Outlook COM 增益集。然而,開發 COM 增益集通常需要比建立簡短巨集更大量的程式設計知識,所以如果您的 Visual Basic for Applications 專案相對較簡單,而且沒有太多人需要用它,則將程式碼傳送給他們,並附上操作指示,說明如何開啟 Visual Basic 編輯器,並手動匯入程式碼模組。

匯入及匯出模組

嘗試在 Module1 中匯出及匯入您的新巨集。在 [專案] 窗格中選取 [Module1],然後在 Visual Basic 編輯器中按一下 [檔案] 功能表,再選取 [匯出檔案…]。Visual Basic 編輯器應該會提示您將檔案另存為 Basic 檔案 (.bas)。將檔案另存為 Contacts.bas。(如果預設副檔名是其他類型,請確認您已選取 [Module1],然後重新開啟 [匯出檔案] 對話方塊。)

在記事本中開啟 Contacts.bas,查看您的程式碼,當您匯入程式碼時,Visual Basic 編輯器將會使用其標題行來命名模組。

    Attribute VB_Name = "Module1"

Module1 可用於本機指令碼和實驗,所以請將名稱變更為可描述模組中之巨集的名稱。例如,您可以使用 Contacts 作為模組名稱,以與 .bas 檔案的名稱相稱。之後,如果您撰寫其他巨集來自動化連絡人的不同層面,您可以在這裡新增程式碼,並且在單一模組中有一個巨集的邏輯群組。

    Attribute VB_Name = "Contacts"

現在回到 Visual Basic 編輯器。依序按一下 [檔案] 和 [匯入檔案],然後選取 [Contacts.bas] 將其匯入。

按兩下出現在 [專案] 窗格的 [模組] 清單中的新 [連絡人] 模組,以查看您的程式碼。

在 Outlook 中,按一下 [開發人員] 索引標籤中的 [巨集] 按鈕。您應該會看到 …Project1.Contacts.CompanyChange 的項目。

這樣即完成將巨集程式碼散佈給其他組織成員的最簡單方法。當然,若要在 Visual Basic 編輯器中匯入 Contacts.bas 以及新增 [連絡人] 模組,他們還是必須啟用 Outlook 2010 中的 [開發人員] 索引標籤。在他們匯入 Contacts.bas 之後,即可從 [開發人員] 索引標籤執行您的巨集,或是開啟 [Outlook 選項],再將巨集指派給 [快速存取工具列] 按鈕或功能區本身。如需較複雜之部署選項的詳細資訊,請參閱<其他參考資料>一節。

摘要

本文審視了 Microsoft Outlook 中的 Visual Basic for Applications (VBA) 功能。VBA 可以自動化重複的工作,以及擴充 Outlook 2010。本文使用實際的 VBA 程式設計範例來說明如何開啟 [開發人員] 工具列、如何建立巨集,然後加以執行、編輯和偵錯。此外,本主題還討論了 VBA 變數、物件模型及函數,例如 If 和 For Each。

其他資源

如需詳細資訊,請參閱下列資源: