共用方式為


使用建置組塊

Word 2007 引入的建置組塊與舊版的自動圖文集項目類似。 然而,利用建置組塊,您還可以組織項目來決定使用者如何使用項目。 自訂建置組塊可協助使用者使用格式化的下拉式清單,在檔中的任何位置插入豐富的內容。 與內容控制項搭配使用時,建置組塊會讓您更快、更輕鬆地開發強大的解決方案。

建置組塊物件模型包含三個新物件和四個新集合。 它們讓您能建立適合特殊需要的組織結構,及修改特定解決方案的結構。 下表列出新的物件和集合。

名稱 描述
BuildingBlock 特定的建置組塊項目
BuildingBlocks 範本中相同類型和類別之建置組塊項目的集合
BuildingBlockEntries 範本中所有建置組塊的集合
BuildingBlockType 建置組塊類型
BuildingBlockTypes 建置組塊類型的集合
類別 建置組塊類別
Categories 建置組塊類別的集合

瞭解建置組塊

建置組塊依類型和類別來組織。 建置組塊類型由有限數目的 WdBuildingBlockTypes 常數組成。 雖然這些常數的數目有限,但數目不小。 有 35 個不同的 WdBuildingBlockTypes 常數。 這些類型有助於您定義及組織建置組塊,雖然您無法建立額外的建置組塊類型,但對於每個類型可以建立不限定數目的類別。

類別是由不限數量的字串所組成,您可以定義這些字串來組織自訂建置組塊。 建置組塊會儲存在範本中。 根據預設,Word 隨附的範本具有建置組塊類別,例如 「General」 和 「Built-In」。 不過,您不限於這些範本中包含的類別。 類別可以是您定義的任何字串。 本主題稍後會說明類型和類別。

因為您可以將建置組塊組織成類型和類別,所以建置組塊可能會非常有彈性。 例如,您可以有名為 「Title」 的建置組塊,其類型為 wdTypeBibliography 和 「Book Titles」 類別,另一個名為 「Title」 的建置組塊具有 wdTypeBibliography 類型和 「Movie Titles」 類別,然後您可以有另一個名為 「Title」 的建置組塊,其類型為 wdTypeCustomHeaders 和 「Book Titles」 類別等等。 建置組塊提供絕佳的彈性,可協助您建立自訂解決方案,而不需要撰寫程式碼。

然而,建置組塊也是可程式化的。 您可以用程式來建立新建置組塊、刪除建置組塊及管理建置組塊。 您也可以藉由使用 BuildingBlockInsert 事件,查看使用者何時在文件中插入新的建置組塊。 而且,您可以搭配內容控制項使用建置組塊,更進一步控制文件中使用者可插入哪些建置組塊。 例如,您可以使用建置組塊內容控制項,來篩選使用者可以看見的建置組塊類型,這表示在文件特定地方使用者無法插入不允許的建置組塊。 下列各節的數個範例會說明如何使用建置組塊物件,以程式處理建置組塊。

簡單工作

下列各節提供一些簡單的範例,說明如何使用建置組塊物件來執行特定工作。 您可以在物件主題和許多成員主題中找到其他程式碼範例。

建立自訂建置組塊

建立自訂建置組塊就像使用BuildingBlockEntries集合的Add方法一樣簡單。 您也可以使用BuildingBlocks集合的Add方法;不過,如果目前沒有指定類型或類別的建置組塊,這個方法可能會引發執行階段錯誤。 如物件資料表中所述, BuildingBlocks 集合是特定類型和類別的建置組塊集合。 BuildingBlocksEntries 集合包含範本的所有建置組塊。 因此,用程式新增新建置組塊的慣用方法,是使用 BuildingBlockEntries 集合的 Add 方法。

下列程式碼範例會摺疊目前的選取範圍、建立範圍及指定範圍的文字,然後將選取範圍做為自訂建置組塊,新增至目前文件附加範本中的建置組塊項目集合。

Sub AddCustomBuildingBlock() 
 
 Dim objTemplate As Template 
 Dim objBB As BuildingBlock 
 Dim objRange As Range 
 
 ' Set the template to store the building block 
 Set objTemplate = ActiveDocument.AttachedTemplate 
 
 ' Collapse the range, set the range, and add the text 
 Selection.Collapse 
 Set objRange = Selection.Range 
 objRange.Text = "Building blocks for the technically challenged" 
 
 ' Add the building block to the template 
 Set objBB = objTemplate.BuildingBlockEntries.Add( _ 
 Name:="Title", _ 
 Type:=wdTypeCustomHeaders, _ 
 Category:="Book Titles", _ 
 Range:=objRange) 
 
End Sub

新增類別

如上述,您可以新增不限定數目的類別。 然而, Categories 集合沒有 Add 方法。 因此,若要將新類別新增至集合,您必須新增新的建置組塊。 例如,在上一個程式碼範例中,如果您在執行程式碼時 "Book Titles" 類別不存在,Word 就會將它新增至 Categories 集合。

存取現有的建置組塊

在某個時間點,您會想要存取您擁有的其中一個建置組塊,無論是自訂建置組塊或其中一個內建建置組塊。 您會使用 BuildingBlockEntries 集合,但因建置組塊可能共用相同名稱,所以您必須先識別建置組塊的類型和類別,才會知道所要傳回的建置組塊。 因此,存取現有建置組塊的最好方法是透過 BuildingBlocks 集合。

下列程式碼範例會存取您在上一個程式碼範例中新增的建置組塊。

Sub GetExistingBuildingBlock() 
 
 Dim objTemplate As Template 
 Dim objBB As BuildingBlock 
 
 ' Set the template where the building block is stored 
 Set objTemplate = ActiveDocument.AttachedTemplate 
 
 ' Access the building block through the type and category 
 Set objBB = objTemplate.BuildingBlockTypes(wdTypeCustomHeaders) _ 
 .Categories("Book Titles").BuildingBlocks("Title") 
 
End Sub

將建置組塊插入檔中

存取建置組塊之後,您可以使用 BuildingBlock 物件的 Insert 方法,將它插入文件中。 下列程式碼範例擴充上一個程式碼範例,會新增一行,將建置組塊插入使用中文件的插入點 (如果已選取文字,則會取代選取的文字)。

注意事項

當您使用功能區插入建置組塊時,Word 會自動判斷建置組塊的某些事項,例如要插入建置組塊的位置;不過,當您透過物件模型插入建置組塊時,此內建智慧都不會自動發生。 例如,當您使用功能區來插入標題建置組塊時,Word 會自動判斷取代現有的標題。 當您使用物件模型來插入相同的標題建置組塊時,您必須明確指定建置組塊文字的位置。

Sub InsertExistingBuildingBlock() 
 
 Dim objTemplate As Template 
 Dim objBB As BuildingBlock 
 
 ' Set the template where the building block is stored 
 Set objTemplate = ActiveDocument.AttachedTemplate 
 
 ' Access the building block through the type and category 
 Set objBB = objTemplate.BuildingBlockTypes(wdTypeCustomHeaders) _ 
 .Categories("Book Titles").BuildingBlocks("Title") 
 
 ' Insert the building block into the document replacing any selected text 
 objBB.Insert Selection.Range 
 
End Sub

篩選內容控制項中的建置組塊清單

如果結合建置組塊和內容控制項,您可以篩選使用者能存取哪些建置組塊。 藉由使用內容控制項和事件,來執行此動作。 當使用者輸入內容控制項時,會引發 Document 物件的 ContentControlOnEnter 事件。 此事件有使用中內容控制項的參數。 您可以判斷內容控制項是否為建置組塊內容控制項。 如果是的話,您可以使用 BuildingBlockType 屬性和 BuildingBlockCategory 屬性,來識別哪個類型和類別要用來篩選內容控制項的可用建置組塊清單。 這指定了哪些建置組塊會出現在內容控制項標題的下拉式清單。

下列程式碼範例假設文件中至少有一個內容控制項。 如果內容控制項是建置組塊內容控制項,則內容控制項標題中顯示的建置組塊清單只會包含使用本主題前面所示的 AddCustomBuildingBlock 副程式新增的建置組塊。 如需內容控制項的詳細資訊,請參閱使用內容控制項

Private Sub Document_ContentControlOnEnter(ByVal ContentControl As ContentControl) 
 Dim objCC As ContentControl 
 
 Set objCC = ContentControl 
 
 If objCC.Type = wdContentControlBuildingBlockGallery Then 
 objCC.BuildingBlockType = wdTypeCustomHeaders 
 objCC.BuildingBlockCategory = "Book Titles" 
 End If 
End Sub

支援和意見反應

有關於 Office VBA 或這份文件的問題或意見反應嗎? 如需取得支援服務並提供意見反應的相關指導,請參閱 Office VBA 支援與意見反應