Word 2010 的 VBA 快速入門

摘要:  介紹新程式設計師使用 Visual Basic for Applications (VBA) 程式設計來擴充 Microsoft Word 2010。本主題摘要 VBA 語言、有關如何在 Word 2010 中存取 VBA 的指示、實際 Word VBA 程式設計問題的詳細解決方案,以及有關如何程式設計和偵錯的祕訣。

前次修改時間: 2015年5月11日

適用於: Office 2010 | Open XML | Visual Studio Tools for Microsoft Office | Word 2007 | Word 2010

本文內容
什麼是巨集、我為什麼要有巨集,以及我要如何建立巨集?
第二部分:撰寫較複雜的巨集
結論
其他資源
關於作者

發佈日期:   2010 年 4 月

提供者:  

內容

  • 第一部分:端對端巨集範例

  • 第二部分:撰寫較複雜的巨集

  • 結論

  • 其他資源

  • 關於作者

什麼是巨集、我為什麼要有巨集,以及我要如何建立巨集?

巨集可讓您將 Word 放在自動駕駛儀上。

如果每當您在 Word 中執行某項工作時,都必須使用一長串的滑鼠按鍵或鍵盤按鍵,經常執行這樣的工作會很累人。當您撰寫巨集時,可以匯集命令的集合,只要按一下滑鼠或鍵盤按鍵,就可以指示 Word 啟動命令。

本文假設您是技術熟練的 Word 的使用者。另外也假設您對軟體開發的電腦程式設計一無所知。

本文分成兩個部分:

  1. 文章的第一部分說明端對端範例:如何撰寫簡單的巨集、可以將它儲存在哪裡、如何在 [快速存取工具列] 上建立按鈕或是建立鍵盤快速鍵來執行巨集,以及如何將該巨集複製到另一部電腦 (好讓您可以在家或辦公室使用,或是與同事共用)。該部分會提供您簡單的範例。

  2. 文章的第二部分將詳細審視巨集:如何撰寫較複雜的巨集,以及如何確定您的巨集實際執行您想要的工作,而沒有產生錯誤或問題。

第一部分:端對端巨集範例

巨集的目的之一,是要讓您能夠只按一下滑鼠或鍵盤按鍵,就可以執行工作。

我經常建立含有網站超連結的文件。依預設,Word 需要我按 CTRL 鍵並以滑鼠左鍵按一下超連結,才能追蹤或開啟超連結。下列圖像顯示追蹤超連結的預設選項。

圖 1. 按 CTRL 鍵並按一下超連結加以追蹤

追蹤超連結的預設選項

下列圖像顯示按一下滑鼠左鍵來追蹤超連結的替代選項。

圖 2. 按一下滑鼠左鍵來追蹤超連結

追蹤超連結的其他選項

有時候那很好用,但有時候我比較喜歡用按一下滑鼠按鍵的方式來追蹤超連結 (圖 2)。我一天可能要做很多次該設定,因此我會按一下 [檔案] 按鈕,然後在 [說明] 底下按一下 [選項]。在 [Word 選項] 對話方塊中,我按一下 [進階],然後在 [編輯] 選項底下選取 (或清除) [使用 CTRL+滑鼠左鍵追蹤超連結],再按一下 [確定]。重複使用一連串的滑鼠按鍵很累人。我希望能夠按一下,就可以進行此設定。

本節說明如何建立巨集範例來切換使用 CTRL+滑鼠左鍵 及只要按一下超連結。若要建立此巨集,您要學習如何:

  • 建立 Word 啟用巨集的範本檔案 (.dotm) 來存放巨集,並將它儲存在 Word Startup 資料夾。

  • 開啟並使用 Visual Basic 編輯器,其為 Word 的一部分。

  • 在 Visual Basic 編輯器中撰寫巨集。

  • 測試巨集。

  • 在 [快速存取工具列] 上建立按鈕,以執行巨集。

  • 建立鍵盤快速鍵來執行巨集。

  • 儲存檔案,將它載入成增益集,若有需要,也可以和同事共用,或是在其他電腦上使用。

本節會說明每個步驟。

建立檔案來包含巨集

在開始撰寫巨集之前,請先想想其儲存的方法和位置。

Word 可讓您將巨集儲存在兩種 Word 檔案類型中:Word 啟用巨集的文件檔案 (.docm) 和 Word 啟用巨集的範本檔案 (.dotm)。不建議將巨集儲存在文件中。巨集通常是存放在 Word 啟用巨集的範本檔案 (.dotm) 中。

要儲存在 Normal 範本 (Normal.dotm) 也是可以,但是會很難組織或共用您的巨集。建立您自己的檔案,再將巨集儲存在那裡,通常會比較好。

範本檔案的儲存位置取決於您想要怎麼使用巨集。您必須決定要將巨集用於您可能會處理的所有文件,還是只要用於某些文件。

例如,您可能會為每月銷售報表建立範本,並使用巨集來將那些報表格式化。在此情況下,請將範本檔案儲存在 [使用者範本] 資料夾,並使用該範本作為新文件的基礎。(若要確認 [使用者範本] 資料夾,請按一下 [檔案] 索引標籤,然後按一下 [選項]。在 [Word 選項] 對話方塊中,按一下 [進階],然後按一下 [檔案位置] 按鈕。) 如果巨集存放在範本中,則只有附加至該範本的文件可以存取巨集。其他文件將「看」不到巨集。

在本文中,您將會建立可供任何文件使用的巨集。若要執行該作業,您要建立啟用巨集的範本檔案。首先,請關閉任何已開啟的 Word 檔案。若要建立新檔案來包含您的巨集,請依序按一下 [檔案] 按鈕、[新增] 和 [我的範本]。在 [新增] 對話方塊中,選取 [範本] 選項按鈕,然後按一下 [確定]。將檔案儲存成啟用巨集的範本檔案,其命名為 MyWordTools.dotm,並儲存在 Word Startup 資料夾中。(若要確認 Word Startup 資料夾,請按一下 [檔案] 索引標籤,然後按一下 [選項]。在 [Word 選項] 對話方塊中,按一下 [進階],然後按一下 [檔案位置] 按鈕。)

使用 Visual Basic 編輯器

Word 巨集是以名為 Visual Basic for Applications (VBA) 的程式設計語言所撰寫。

您將巨集撰寫在 Word 中,大部分使用者永遠看不到的部分:Visual Basic 編輯器 (VBE)。使用下列任一方法開啟 VBE:

  • 按鍵盤快速鍵 Alt+F11

  • 按一下 [開發人員] 索引標籤上的 [Visual Basic] 按鈕。若要這麼做,請按一下 [檔案] 索引標籤,然後按一下 [選項]。在 [Word 選項] 對話方塊上,按一下 [自訂功能區]。在對話方塊右邊,選取 [開發人員] 索引標籤。按一下 [確定],以回到您的文件,然後在 [開發人員] 索引標籤上,按一下 [Visual Basic] 按鈕。

  • 新增 Visual Basic 指令至 [快速存取工具列]。

在開始使用 VBE 之前,請在 [工具] 功能表上按一下 [選項]。在 [選項] 對話方塊中的 [編輯器] 索引標籤上,確定已選取所有核取方塊。

您會在 VBE 左上方看到 [專案總管]。它會顯示 Word 中目前開啟的所有檔案。您應該會看到 [Normal] (即為 Normal.dotm) 和 [MyWordTools] (您剛才建立的新檔案)。

下圖顯示在 Visual Basic 編輯器專案總管中的 MyWordTools。

圖 3. Visual Basic 編輯器專案總管

Visual Basic 編輯器專案總管

在您的檔案中,巨集存放在模組中。若要新增模組至檔案,請在 [專案總管] 中選取 [MyWordTools] 檔案 (圖 3)。在 [插入] 功能表上,按一下 [模組]。當您新增模組至檔案時,會看到模組新增在 [專案總管] 中,以及其下的 [屬性視窗] 中 (圖 4)。您可以使用 [屬性視窗] 將模組重新命名。請將名稱保留為 Module1。

下圖顯示在 Visual Basic 編輯器專案總管中的 [Module1]。

圖 4. Visual Basic 編輯器專案總管

Visual Basic 編輯器屬性視窗

最後,您會看到檔案的項目命名為 TemplateProject。雖然不是必要,但還是建議您為其指定較具描述性的名稱。若要這麼做,請以滑鼠右鍵按一下 [MyWordTools] 檔案的項目,然後按一下快顯功能表上的 [TemplateProject]屬性 (圖 5)。

下圖顯示 [TemplateProject 屬性…] 功能表項目

圖 5. 屬性功能表項目

選取專案屬性快顯功能表項目

在 [範本專案-專案屬性] 對話方塊中,將專案名稱變更為 MyWordTools。

撰寫巨集

VBE 中右邊大片的白色區域是您撰寫巨集程式碼的地方。如果沒看到,請在 [檢視] 功能表上按一下 [程式碼],就會看到程式碼視窗。Word 會自動在程式碼視窗頂端插入陳述式 Option Explicit。請勿將其刪除。

您想要讓巨集在 Word 中切換追蹤超連結的兩種可能設定。其運作方式就像在 Word 中切換設定的其他按鈕。例如,[常用] 索引標籤上的 [粗體] 按鈕會將非粗體的文字變成粗體,並將目前為粗體的文字變成非粗體。

將下列巨集程式碼範例複製並貼上至程式碼視窗中。

    Sub ToggleHyperlinkCtrlClick()
        Options.CtrlClickHyperlinkToOpen = Not Options.CtrlClickHyperlinkToOpen
    End Sub

這是名為 ToggleHyperlinkCtrlClick 的短巨集,只有一列程式碼。這一列程式碼在我們的巨集中代表「變更控制使用者是否必須使用 CTRL+滑鼠左鍵的 Word 選項 來開啟超連結的相反目前設定,亦即其目前的設定為 Not」(圖 6)。

下圖顯示 ToggleHyperLinkCtrlClick 方法的逐列說明。

圖 6. ToggleHyperLinkCtrlClick 方法的說明

Visual Basic 編輯器程式碼視窗中的程式碼

測試巨集

若要測試巨集,請使用下列程序。

測試巨集

  1. 排列 Word 和 VBE 視窗,讓您可以看到它們並排。

  2. 按一下主要 Word 視窗。在 MyWordTools.dotm 文件中輸入幾段文字。在您的文字中包含一些超連結 (圖 7)。

    下圖顯示 MyWordTools 文件與 ToggleHyperLinkCtrlClick 程式碼在 VBE 中並排。

    圖 7. 文件與 Visual Basic 編輯器並排

    文件和 Visual Basic 編輯器的分割畫面

  3. 在 VBE 中,按一下巨集中的任何地方。若要執行巨集,請在 [執行] 功能表上按一下 [執行 Sub/使用者表單],或按 F5 鍵。

  4. 用來追蹤超連結的設定將會變更。將滑鼠停留在主要 Word 視窗中的超連結上,即可看到工具提示已變更。

  5. 重新執行巨集,以切換設定。

您也可以在 Word 本身中執行巨集。在 [檢視] 索引標籤上的 [巨集] 群組中,按一下 [巨集] 按鈕。您的 ToggleHyperlinkCtrlClick 巨集將會列在 [巨集] 對話方塊中。若要執行巨集,請按一下巨集的名稱,然後按一下 [執行] 按鈕。

在快速存取工具列上建立按鈕以執行巨集

如果想要按一下就能存取巨集,您可以新增按鈕至 [快速存取工具列]。若要那麼做,請使用下列程序。

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

  1. 以滑鼠右鍵按一下 [快速存取工具列],然後按一下快顯功能表上的 [自訂快速存取工具列]。

  2. 在 [自訂快速存取工具列] 底下的 [由此選擇命令] 清單中,選取 [巨集]。

  3. 在 [自訂快速存取工具列] 清單中,選取 MyWordTools.dotm。(您必須選取 MyWordTools.dotm,這樣 Word 才會在 MyWordTools.dotm 檔案中的 [快速存取工具列] 上儲存按鈕。只有當您將該檔案複製到另一部電腦時,才能使用此按鈕。)

  4. 選取 ToggleHyperlinkCtrlClick 巨集,然後按一下 [新增]。

  5. 按一下 [修改] 按鈕選取符號,並將名稱變更為 ToggleHyperlinkCtrlClick。

現在您可以隨時按一下 [快速存取工具列] 上的新按鈕來執行巨集。

建立鍵盤快速鍵來執行巨集

您也可以建立鍵盤快速鍵來執行巨集。若要那麼做,請使用下列程序。

建立鍵盤快速鍵來執行巨集

  1. 以滑鼠右鍵按一下 [快速存取工具列],然後按一下快顯功能表上的 [自訂功能區]。在 [鍵盤快速鍵] 旁邊,按一下 [自訂按鈕]。

    下圖顯示 [自訂鍵盤] 對話方塊

    圖 8. [自訂鍵盤] 對話方塊

    [自訂鍵盤] 對話方塊

  2. 在 [自訂鍵盤] 對話方塊 (圖 8) 中,您必須:

    1. 在 [類別] 清單中選取 [巨集]。

    2. 在 [巨集] 清單中,按一下您的巨集名稱。

    3. 在 [請按新設定的快速鍵] 方塊中按一下,然後輸入您要使用的鍵盤快速鍵。我使用 Alt+H,因為這會切換超連結 (Hyperlink) 的設定,所以我會記得。對話方塊還告訴我此快速鍵目前未被指定,所以我不會干擾現有的鍵盤快速鍵。

    4. 在 [儲存清單中的變更] 中,選取 [MyWordTools.dotm]。(您必須選取 [MyWordTools.dotm],這樣 Word 才會將鍵盤快速鍵儲存在 MyWordTools.dotm 檔案中。只有當您將該檔案複製到另一部電腦時,才能使用此按鈕。)

    5. 按一下 [指定]。

若要執行您的巨集,請按 Alt+H鍵。

完成

您現在已建立新檔案來包含您的巨集 (MyWordTools.dotm)、新增模組 (Module1)、建立巨集 (即 ToggleHyperlinkCtrlClick)、在 [快速存取工具列] 上建立按鈕來啟動巨集,以及建立鍵盤快速鍵來啟動巨集。現在,請儲存 MyWordTools.dotm 檔案 (您可以在 VBE 中或是從主要 Word 視窗執行此作業)。

因為您已經完成 VBE 的部分,請將它關閉,並回到 Word。若要那麼做,請在 VBE 中按一下 [檔案] 功能表,然後按一下 [關閉並返回 Microsoft Word]。

若要測試您的巨集,請在 [快速存取工具列] 上按一下您的按鈕。確認運作正常之後,儲存並關閉檔案。

管理及載入增益集

原本的計劃是,無論您處理的文件為何,此巨集都應該可供使用。但是如果您建立新文件 (使用 CTRL+N),就無法在 [快速存取工具列] 上看到您的按鈕。那就沒辦法啟動您的巨集。

若要讓存放在 MyWordTools.dotm 中的巨集能夠用於您開啟的任何文件,您必須將 MyWordTools.dotm 載入為增益集。(當 .dotm 檔案用作增益集時,也就成為所謂的「通用範本」。) 您可以手動或自動將 .dotm 檔案載入為增益集:

  • 若要手動將 .dotm 檔案載入為增益集,請關閉 .dotm 檔案 (如果目前為開啟的話)。在 [開發人員] 索引標籤上,按一下 [增益集] 按鈕。在 [範本與增益集] 對話方塊中,按一下 [新增],找到您的 .dotm 檔案,然後按一下 [開啟]。

  • 若要自動將 .dotm 檔案載入為增益集,.dotm 檔案必須儲存在 Word Startup 資料夾中。請關閉並重新啟動 Word。Word 就會自動載入您的增益集。

您可以看到 Word 中目前已載入哪些增益集。在 [開發人員] 索引標籤上,按一下 [增益集] 按鈕。

因為您將 MyWordTools.dotm 儲存在 Word Startup 資料夾中,所以請關閉並重新啟動 Word。Word 將會自動將您的 MyWordTools.dotm 載入為增益集。您應該會看到該按鈕在 [快速存取工具列] 上,而您就可以使用您的巨集了。

當 MyWordTools.dotm 載入為增益集,您不會在 MyWordTools.dotm 中看到您遺留在主要 Word 視窗中的任何文字。Word 不使用文件本身表面的任何內容。在儲存用作增益集的 .dotm 檔案之前,請先刪除主要 Word 視窗中的任何文字。

區分開啟增益集檔案 (例如,按一下 [檔案],然後按一下 [開啟]) 與載入增益集 (例如,使用 [開發人員] 索引標籤上的 [增益集 按鈕) 是很重要的。在您想要加以編輯和測試時,就開啟檔案。在您想要加以使用時,則載入檔案。

注意事項注意事項

如果檔案目前在 Word 中開啟,則絕不要將檔案載入為增益集。如果增益集檔案目前已載入為增益集,則絕不要將它開啟和編輯。這樣會導致無法預期的行為。

在另一部電腦上使用您的巨集

若要使用您的巨集,您必須要有:

  • 巨集程式碼。

  • [快速存取工具列] 上要有執行該巨集的按鈕。

  • 執行該巨集的鍵盤快速鍵。

您已將上述三項都儲存在 MyWordTools.dotm 中。因此,若要在另一部電腦上使用您的巨集,或是要共用您的巨集,只需要將 MyWordTools.dotm 複製到另一部電腦上的 Word Startup 資料夾即可。當您啟動 Word 時,Word 會將 MyWordTools.dotm 載入為增益集,而您的巨集、按鈕和鍵盤快速鍵都將可供使用。

第二部分:撰寫較複雜的巨集

第一部分中的端對端範例包含簡單的單列巨集。第二部分則說明如何擴充那個基本的端對端程序,以建立較複雜的巨集。

新增其他巨集至 MyWordTools.dotm 檔案

您在第一部分中建立的檔案 MyWordTools.dotm 現在包含一個模組 (Module1),而該模組包含一個巨集 (ToggleHyperlinkCtrlClick)。

當檔案載入為增益集時,請勿加以編輯。若要新增其他巨集至您的檔案,您必須:

  1. 卸載檔案的增益集用法。若要那麼做,請在 [開發人員] 索引標籤上按一下 [增益集],然後按一下清除增益集的核取方塊,再按一下 [確定]。

  2. 開啟檔案進行編輯。若要那麼做,請按一下 [檔案] 索引標籤。在 [資訊] 底下按一下 [開啟]。尋找檔案,按一下該檔案,然後按一下 [開啟]。

當開啟檔案進行編輯時,您可以:

  • 在程式碼視窗中輸入,以新增巨集至現有的模組 Module1,或是

  • 新增模組至檔案,並且在新模組中輸入新的巨集。

要使用哪一種方法,取決於您的巨集有多複雜。如果您只有幾個短巨集,則通常會將它們全部放在一個模組中。如果您有很多長巨集,您可能會比較想將它們存放在個別的模組中,並重新命名每個模組,以指出模組包含的巨集為何。

將新巨集新增至檔案之後,您可以加以測試、在 [快速存取工具列] 上為其建立按鈕,以及為其建立鍵盤快速鍵,就和您為第一個巨集所做的一樣。

註解

專業開發人員通常會在其程式碼中包含註解,以說明該程式碼的目的。

您可以在註解文字前面加上單引號,以新增註解至巨集。依預設,VBE 會以綠色顯示註解。

撰寫完善的程式碼:用來將文字排序的巨集

如果您與同事共用巨集,有兩件事需要考量。第一,另一個人的電腦設定幾乎不可能和您的相同。第二,另一個人對於不良程式碼的容忍度可能較低。因此,您的程式碼必須很完善。

如果巨集很完善,使用者就不會看到難以理解的錯誤訊息,而巨集會執行應執行的工作,不多也不少。

為示範撰寫完善程式碼的一些問題,請考量使用來將文字排序的下列巨集。

將數段文字排序時,需要按好幾次滑鼠。如果您必須經常將文字排序,以單一按鈕來執行簡單的排序可能會很有用 (而且當您必須執行較複雜的排序時,還是可以使用 [常用] 索引標籤上的內建按鈕)。此巨集動作顯示在下列程式碼範例中。

    Sub SortText1()
    ' A macro to sort the selected text
         Selection.Sort
    End Sub

您可以像測試上一個巨集那樣來測試此巨集。將Word 與 VBE 視窗並排。在主要 Word 視窗中,輸入數段文字,並加以選取。在 VBE 中,按一下巨集程式碼內部,並按 F5鍵,以執行巨集。Word 會照字母順序將這些段落排序。

我們的 SortText1 巨集看似運作的很好。然而,它並不完善。若要查看出了什麼問題,請在文件中插入圖片。使它成為浮動圖片。若要那麼做,請選取圖片。在 [格式] 索引標籤上,[圖片工具] 底下的 [排列] 群組中,按一下 [位置]。選取任一 [文繞圖] 頁面位置選項。

選取圖片,然後執行 SortText1 巨集。因為讓 Word 將一個浮動圖片排序並沒有意義,所以您會看到 Visual Basic 產生的錯誤訊息。那並不是個完善的巨集!

我們的單列程式碼 Selection.Sort 只有在您選取原文時運作正確。在您找出該問題的解決方法之前,請先考量另一個問題。

注意事項注意事項

如果您在文件中按一下,而沒有選取任何文字,然後執行 SortText1 巨集,則會將整份文件排序。最好的情況是,那是個意外;最壞的情況,則可能會毀損資料。

下列程式碼範例顯示如何限制巨集只在選取兩段以上文字的情況下排序。

    Sub SortText2()
    ' A macro to sort the Selection if the user has selected more than one
    ' paragraph of text.
        If Selection.Paragraphs.Count > 1 Then
            Selection.Sort
        End If
    End Sub

執行 SortText2 巨集的實驗。和 SortText1 不同的是,如果您選取圖片,然後執行巨集,此巨集不會顯示錯誤訊息。此外,它也不會讓您突然將整份文件排序。若要查看發生什麼事,請使用下列程序,逐一檢視各列程式碼。

逐一檢視 VBA 程式碼

  1. 在主要 Word 視窗中按一下,並選取圖片。

  2. 在 SortText2 巨集中的任何地方按一下。

  3. 按 F8鍵。Word 會醒目提示巨集的第一列 (Sub SortText2())。

  4. 重複按 F8 鍵,逐一檢視每一列程式碼。

使用 F8 鍵逐一檢視程式碼是查看程式碼執行何項工作,以及疑難排解問題程式碼的常見方法。在此情況下,您會看到,當選取圖片時,Word 會處理 If 陳述式,但會跳過 Selection.Sort 陳述式。

在新的 SortText2 巨集中,需要查看幾個重點:

  • 您可以使用 If 和 End If 來控制 Word 會處理或跳過程式碼。

  • If 列以關鍵字 Then 結尾。

  • 每個 If 都必須要有相對應的 End If。

  • 此巨集使用兩次 Selection。Selection.Paragraphs.Count 提供使用者選取項目的相關資訊。Selection.Sort 會將所選取文字排序。

下列程式碼範例顯示如何擴充此巨集,以使用 Else 和 MsgBox 關鍵字來提供資訊給使用者。

    Sub SortText3()
        If Selection.Paragraphs.Count > 1 Then
            ' The user has selected more than one paragraph of text.
            ' Sort the selection.
            Selection.Sort
        Else
            ' Tell the user what to do.
            MsgBox "Please select two or more paragraphs and try again."
        End If
    End Sub

從這個巨集,您可以看到:

  • 您可以使用 If…Then、Else 和 End If 來控制 Word 會處理或跳過程式碼。

  • Else 陳述式的使用是選擇性的。每個 If 陳述式可能會有零個或一個 Else 陳述式。

  • 如果您使用 Else,則還是需要 End If。

  • 此命令會在畫面上對使用者顯示訊息。請在關鍵字 MsgBox 後面輸入訊息文字,並且用雙引號含括。如果您在巨集中提供任何文字 (例如此訊息的文字),則您必須用引號 (") 將其含括。若沒有引號,Word 就會嘗試在 Word 物件模型中尋找 "Please"。因為 Word 不知道 "Please" 的意思,所以巨集會造成錯誤訊息。

若要查看問題,請使用下列程序。

測試 SortText3 巨集

  1. 在 [快速存取工具列] 上建立按鈕,以啟動 SortText3 巨集。指示 Word 將按鈕儲存在 MyWordTools.dotm 中。

  2. 測試按鈕,以確定它會執行 SortText3 巨集。

  3. 儲存 MyWordTools.dotm 檔案

  4. 關閉並重新啟動 Word

  5. 如果有文件開啟,請將它關閉,不要有任何文件開啟。

  6. 在 [快速存取工具列] 上再測試一次按鈕。

您應該會看到錯誤訊息。會出現此錯誤是因為巨集第一列參照 Selection。增益集已載入。如果主要 Word 視窗中沒有文件開啟,則不會有 Selection。若沒有 Selection,Word 就無法執行巨集中的程式碼。

再對巨集進行一項變更,使它臻於完善。在巨集頂端新增註解。這是記載巨集的好方法,這樣任何人都會知道巨集的目的是什麼。

卸載增益集,然後開啟檔案進行編輯。以下列程式碼範例取代現有的巨集。

    Sub SortText()
    ' A macro to sort the selected text, if the user has selected 
    ' more than one paragraph
    
        If Documents.Count > 0 Then
            ' The user has at least one document open.
            
            If Selection.Paragraphs.Count > 1 Then
                ' The user has selected more than one paragraph
                ' of text, so sort it.
                Selection.Sort
            Else
                ' Tell the user what to do.
                MsgBox "Please select two or more paragraphs and try again."
            End If
        End If
    End Sub

在這個 SortText 最後版本中,此範例使用巢狀 If…End If 區塊。縮排程式碼列是很重要的。每個 If 都會配對至正確的 End If。

不完善的巨集會導致:

  • 錯誤訊息 (例如,當使用 Selection 物件,但沒有文件開啟,因此沒有 Selection 時),或

  • 不想要的行為 (例如,當 Selection.Sort 命令不小心將整份文件排序時)。

以下是撰寫完善巨集的秘訣。

  • 如果您的巨集參照 Selection,請建立測試文件,並且在選取文件的不同部分之後執行巨集,以進行測試:只是按一下,而不選取文字,將游標移至文件頂端或文件底端,或是選取單一文字、數個段落、一張圖片、部分或整個資料表、頁首或頁尾中的文字、註腳或章節附註中的文字,或是註解等等。

  • 關閉檔案,將其載入為增益集,並測試您的巨集,以確定當沒有文件開啟時,巨集有效。使用 If Documents.Count > 0 來確認是否有文件開啟。

了解 Word 物件模型

到目前所建立的巨集已使用三個重要的 Word 元素:

  • Options。這是指用來設定 Word 的選項。

  • Documents。這是指目前在 Word 中開啟的所有文件。您可以使用關鍵字 ActiveDocument 來參照目前作用中文件。

  • Selection。這是指使用者已在 ActiveDocument 中選取的任何項目。可能是一個字、數個段落、一張圖片,或任何其他類型的內容。

針對這些巨集,使用了下列低階元素:

這些元素 (Options、Documents 和 Selection) 即所謂的「物件」,它們都是 Word 物件模型的一部分。

物件模型是一個階層。階層包含 Word 中需要以巨集來控制的所有部分。例如,ActiveDocument 物件是指目前作用中的文件。

如果您目前的文件包含至少 3 列和至少 2 欄的資料表,則以下會在作用中文件第一個資料表第三個資料列的第二個資料格中顯示文字。

    MsgBox ActiveDocument.Tables(1).Rows(3).Cells(2).Range.Text

巨集可以操作物件 (例如 Selection 物件或 ActiveDocument 物件)。實際上,物件有兩種操作方式:方法和屬性。

方法就像動詞,可描述動作。例如:

  • ActiveDocument.PrintPreview

  • ActiveDocument.AcceptAllRevisionsShown

屬性就像形容詞,可描述物件。例如:

  • MsgBox ActiveDocument.Paragraphs(1).Range.Text

  • ActiveDocument.Paragraphs(1).Range.Text = "New text for Paragraph 1"

在上述第一個範例中,巨集會「讀取」Text 屬性,並且在訊息方塊中顯示文字。在第二個範例中,巨集會「寫入」(或設定) Text 屬性。執行該程式碼列會將第一段中的現有文字變更為 "New text for Paragraph 1"。

一般而言,您的巨集可以「讀取」屬性或「寫入」屬性。然而,有些是唯讀屬性。例如,Documents 物件有一個名為 .Count 的屬性。思考一下下列程式碼:

  • MsgBox Documents.Count ' Reports the number of currentlyopen documents.

  • Documents.Count = 4 ' Does not work: .Count is a readonly property.

寫入捷徑程式碼:用來切換文字範圍顯示的巨集

當我編輯大型文件時,我喜歡看到文字範圍在我的文件內。當我校對時,喜歡關閉文字範圍。我可能會在一天之中切換多次文字範圍顯示開關。若要那麼做,我會按一下 [檔案] 按鈕,並且在 [說明] 底下按一下 [選項]。在 [Word 選項] 對話方塊中,按一下 [進階],然後在 [顯示文件內容] 底下選取 (或清除) [顯示文字範圍],然後按一下 [確定]。重複執行這樣的滑鼠按鍵作業很累人。我比較想要按一下就能將文字範圍開啟或關閉。

下列程式碼範例是用來切換文字範圍顯示開關的巨集。

    Sub ToggleTextBoundaries1()
    ActiveDocument.ActiveWindow.View.ShowTextBoundaries = Not ActiveDocument.ActiveWindow.View.ShowTextBoundaries
    End Sub

Word 不介意單列程式碼這麼長,但是要輸入的內容很多,人類很難閱讀。若要縮短巨集,以方便閱讀,請使用 With 關鍵字,如下列程式碼範例所示。

    Sub ToggleTextBoundaries2()
        With ActiveDocument.ActiveWindow.View
            .ShowTextBoundaries = Not .ShowTextBoundaries
        End With
    End Sub

在物件模型中,您可以在階層的每個項目之間使用句點 ("."),以從一個物件「向下切入」至另一個物件。因為句點會將子物件標示為脫離其父物件,所以您不能以句點起始程式碼列 (使用 With 關鍵字時除外)。

每個 With 都必須與 End With 陳述式配對。您可以在 With 與 End With 之間使用句點來開始捷徑。

    With ActiveDocument.ActiveWindow.View
            ' Between With and End With you can use 
            ' a period to begin shortcut code.
            ' The shortcut will refer to ActiveDocument.ActiveWindow.View.
        End With

例如,在這個 With 與 End With 之間,捷徑 .ShowTextBoundaries 是指 ActiveDocument.ActiveWindow.View.ShowTextBoundaries。

當您有程式碼參照相同物件好幾次時,如果您使用 With 和 End With,需要的輸入就較少,也較容易閱讀。

這還不是完善的巨集,但是您可以建立最後的完整版本,如下列程式碼範例所示。

    Sub ToggleTextBoundaries()
        If Documents.Count > 0 Then
            With ActiveDocument.ActiveWindow.View
                .ShowTextBoundaries = Not .ShowTextBoundaries
            End With
        End If
    End Sub

在 ToggleTextBoundaries 的這個最後版本中,有一個 With…End With 區塊巢放在 If…End If 區塊中。將程式碼列縮排,可確保每個 With 都與其 End With 配對,而每個 If 陳述式都與其 End If 陳述式配對。

使用 With 和 Selection 物件:用來插入橫向區段的巨集

這裡有一個使用 With 關鍵字的較完整範例:用來在游標處插入橫向區段的巨集。

此巨集使用 With 關鍵字與 Selection 物件 (也就是 With Selection)。當您更熟練撰寫巨集時,就會發現您愈來愈少使用 Selection 物件,因為通常使用 Range 物件比較有效。研究此巨集是學習 Word 如何管理 Selection 的好方法。在 Word 與 VBE 並排的情況下,按一下巨集內部,並重複按 F8 鍵,一一檢視巨集的每一列,看看主要 Word 視窗中發生什麼事。

此巨集也顯示出,當您有很多列文字時,建議您將其分成邏輯「段落」,並以註解描述程式碼的目的。

    Public Sub InsertLandscapeSectionHere()
    ' Purpose: Insert a landscape section at the insertion point, 
    ' and insert text to tell the user where the landscape section is.
        If Documents.Count > 0 Then
            ' The user has a document open, so insert a 
            ' landscape section.
            With Selection
                ' Do not accidentally over-write selected text
                .Collapse Direction:=wdCollapseStart
    
                ' Insert section breaks with blank paragraphs
                ' in the new section.
                .TypeParagraph
                .Style = ActiveDocument.Styles(wdStyleNormal)
                .InsertBreak Type:=wdSectionBreakNextPage
                .TypeParagraph
                .TypeParagraph
                .TypeParagraph
                .InsertBreak Type:=wdSectionBreakNextPage
                .MoveUp Unit:=wdLine, Count:=3
    
                ' Set the orientation of new section to landscape.
                .PageSetup.Orientation = wdOrientLandscape
    
                ' Provide guidance to the user.
                .TypeText Text:="Your landscape section starts here."
            End With
        Else
            ' Tell the user what to do.
            MsgBox "Please open a document and try again."
        End If
    End Sub

您會在此巨集中看到兩種語法:

  1. 第一種語法使用等號 (=):Selection.PageSetup.Orientation = wdOrientLandscape

  2. 第二種語法使用冒號和等號 (=):Selection.InsertBreak Type:=wdSectionBreakNextPage.

如需這兩種語法類型差異的詳細資訊,請參閱 [VBE 說明] 中的<了解 Visual Basic 語法>一文。

進一步了解 Word 巨集與 Visual Basic 編輯器

Visual Basic 編輯器 (VBE) 包含工具,可協助您撰寫自己的巨集。下列是考量事項清單:

  • Word 巨集錄製是功能強大的工具。如果您想要撰寫巨集,但不知道您必須使用哪部分的 Word 物件模型,巨集錄製是找出答案的最佳方式。如需詳細資訊,請參閱錄製巨集來產生程式碼如何修改已錄製的巨集

  • 當您在 Word 物件模型中輸入物件名稱 (例如 Selection 或 ActiveDocument),然後輸入句點 (.) 時,Word 會顯示該物件的所有屬性和方法清單。如需詳細資訊,請參閱在 15 分鐘內了解 VBA 基本概念

  • VBE 中的[即時運算視窗] 可幫助您進一步了解 Word 物件模型以及測試簡單的巨集。如需詳細資訊,請參閱以單列 VBA 程式碼擴充 Word 2007、Excel 2007 及 PowerPoint 2007

  • 您可以在 VBE 中自訂功能表和工具列。有一個好用的自訂,就是建立註解的鍵盤快速鍵。若要執行此動作,請在靠近功能表或工具列的開放空間中,按一下滑鼠右鍵,再選取 [自訂]。在 [自訂] 對話方塊的 [工具列] 索引標籤上,選取 [編輯] 工具列。讓 [自訂] 對話方塊繼續開啟。在 [編輯] 工具列上,以滑鼠右鍵按一下 [Comment] 區塊按鈕,將名稱變更為 &Comment,然後按一下 [圖像] 和 [文字]。對 [Uncomment] 區塊按鈕執行相同的動作,將其更名為 &Uncomment。您現在即可選取數列程式碼,並使用鍵盤快速鍵 Alt+C 和 Alt+U 來註解或取消註解所選取的程式碼。

  • VBE 包含大量 [說明] 資訊。這將會是您的 Word 物件模型主要資訊來源:

    • 如需一般資訊,請在 VBE 中的 [說明] 功能表上,按一下 [Microsoft Visual Basic for Applications 說明]。請務必按一下用戶端說明檢視器工具列中的書籍小圖示,以顯示 [目錄]。這樣可以讓瀏覽開發人員說明時,更加直覺性。特別是請閱讀 [概念] 底下 [Visual Basic 常見問題集]中的主題。

    • 如需 Word 物件模型中之關鍵字或物件的特定說明 (例如 ActiveDocument),請按一下該字,再按 F1 鍵,以閱讀該關鍵字或物件的相關說明。

結論

Word 巨集可以很長、很複雜,且功能強大。您可以撰寫巨集來與外部資料庫交談、執行計算,並傳回結果至 Word。您也可以在 Word 中撰寫巨集,以控制 Excel、PowerPoint 或 Outlook。有時候簡單的巨集會很有用,並為您節省時間。

如果您的巨集是要將文字格式化,建立樣式可能會比撰寫巨集好。如果巨集是要控制文件的版面配置,建立新範本可能會比較好。此外,可能也會有可讓您新增至 [快速存取工具列] 的內建命令 (自訂 [快速存取工具列] 時,請在 [由此選擇命令:] 清單中按一下 [所有命令])。

盡情享受建立巨集的樂趣,但不要撰寫巨集來執行 Word 原有的功能,多此一舉。

其他資源

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

關於作者

  Shauna Kelly 開發 Word 增益集和範本,幫助政府和企業人士使用 Word 時更有效率。她自 2002 年起就已經是 Microsoft Word MVP。