Работа со стандартными блоками

Стандартные блоки, представленные в Word 2007, похожи на записи автотекста в предыдущих версиях. Однако с помощью стандартных блоков можно упорядочить записи таким образом, чтобы определить, как пользователь их использует. Настраиваемый стандартный блок помогает пользователям вставлять форматированный контент в любое место документа с помощью отформатированного раскрывающегося списка. При использовании вместе с элементами управления содержимым стандартные блоки позволяют быстро и легко разрабатывать мощные решения.

Объектная модель стандартных блоков включает три новых объекта и четыре новые коллекции. Они позволяют создать организационную структуру, которая подходит для ваших конкретных потребностей, и изменить структуру для конкретного решения. Новые объекты и коллекции перечислены в следующей таблице.

Имя Описание
BuildingBlock Определенная запись стандартного блока.
BuildingBlocks Коллекция записей стандартных блоков в шаблоне, которые относятся к одному типу и категории.
BuildingBlockEntries Коллекция всех стандартных блоков в шаблоне.
BuildingBlockType Тип стандартного блока.
BuildingBlockTypes Коллекция типов стандартных блоков.
Категории Категория стандартных блоков.
Categories Коллекция категорий стандартных блоков.

Основные сведения о стандартных блоках

Стандартные блоки упорядочены по типу и категории. Типы стандартных блоков состоят из ограниченного числа констант WdBuildingBlockTypes . Хотя существует ограниченное число этих констант, это число не является небольшим. Существует 35 различных констант WdBuildingBlockTypes . Эти типы помогают определить и упорядочить стандартные блоки, и, хотя вы не можете создать дополнительные типы стандартных блоков, вы можете создать неограниченное количество категорий для каждого типа.

Категории состоят из неограниченного количества строк, которые можно определить для организации пользовательских стандартных блоков. Стандартные блоки хранятся в шаблонах. По умолчанию шаблоны, включенные в Word, имеют категории стандартных блоков, такие как "Общие" и "Встроенные". Однако вы не ограничиваетесь только категориями, включенными в эти шаблоны. Категория может быть любой строкой, которую вы определяете. Типы и категории описаны далее в этом разделе.

Так как вы можете упорядочивать стандартные блоки по типам и категориям, стандартные блоки могут быть невероятно гибкими. Например, можно создать стандартный блок с именем "Title", имеющий тип wdTypeBibliography и категорию "Названия книг", а также другой стандартный блок с именем "Заголовок", имеющий тип wdTypeBibliography и категорию "Названия фильмов", а затем можно создать еще один стандартный блок с именем "Title", имеющий тип wdTypeCustomHeaders и категорию "Названия книг" и т. д. Невероятная гибкость, которую предоставляют стандартные блоки, помогает создавать пользовательские решения без написания кода.

Однако стандартные блоки также программируются. Вы можете создавать новые стандартные блоки, удалять стандартные блоки и управлять стандартными блоками программными средствами. Вы также можете отслеживать, когда пользователи вставляют новые стандартные блоки в документ с помощью события BuildingBlockInsert . Кроме того, можно использовать стандартные блоки с элементами управления содержимым, чтобы получить еще больший контроль над тем, какие стандартные блоки пользователи могут вставлять в свои документы. Например, можно использовать элемент управления содержимым стандартных блоков для фильтрации типов стандартных блоков, которые видятся пользователем. Это означает, что пользователь не может вставить стандартный блок в документ, который не разрешен в определенном месте в документе. В следующих разделах приведено несколько примеров, в которых показано, как использовать объекты стандартных блоков для программной работы со стандартными блоками.

Простые задачи

В следующих разделах приведены простые примеры выполнения определенных задач с помощью объектов стандартных блоков. Дополнительные примеры кода можно найти в разделах объектов и во многих разделах-членах.

Создание пользовательского стандартного блока

Создать пользовательский стандартный блок так же просто, как использовать метод Add для коллекции BuildingBlockEntries . Вы также можете использовать метод Add для коллекции BuildingBlocks . однако этот метод может вызвать ошибку во время выполнения, если в настоящее время нет стандартных блоков для указанного типа или категории. Как описано в таблице объектов, коллекция BuildingBlocks — это коллекция стандартных блоков для определенного типа и категории. Коллекция BuildingBlocksEntries содержит все стандартные блоки для шаблона. Поэтому предпочтительным способом программного добавления новых стандартных блоков является использование метода Add для коллекции BuildingBlockEntries .

В следующем примере кода выполняется свертывание текущего выделенного фрагмента, создание диапазона и указание текста для диапазона, а затем добавление выделения в качестве настраиваемого стандартного блока в коллекцию записей стандартных блоков в шаблоне, присоединенном к текущему документу.

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 не существует. Поэтому, чтобы добавить новую категорию в коллекцию, необходимо добавить новый стандартный блок. Например, в предыдущем примере кода, если категория "Названия книг" не существует при выполнении кода, Word добавляет ее в коллекцию Категорий .

Доступ к существующему стандартному блоку

В какой-то момент вам потребуется получить доступ к одному из имеющихся стандартных блоков, будь то настраиваемый стандартный блок или один из встроенных стандартных блоков. Можно использовать коллекцию 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

Вставка стандартного блока в документ

Получив доступ к стандартному блоку, вставьте его в документ с помощью метода Insert объекта BuildingBlock . В следующем примере кода расширяется предыдущий пример кода путем добавления строки для вставки сборки в активный документ в точке вставки (или для замены выделенного текста, если текст выбран).

Примечание.

При вставке стандартного блока с помощью ленты 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

Фильтрация списка стандартных блоков в элементе управления содержимым

При объединении стандартных блоков с элементами управления содержимым можно отфильтровать, к каким стандартным блокам может получить доступ пользователь. Это можно сделать с помощью элемента управления содержимым и события. Когда пользователь входит в элемент управления содержимым, срабатывает событие ContentControlOnEnter для объекта Document . Это событие имеет параметр для активного элемента управления содержимым. Вы можете определить, является ли элемент управления содержимым стандартным блоком. Если это так, используйте свойства 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 и обратная связь.