Trabalhar com blocos de construção

Introduzidos no Word 2007, blocos de construção são similares às entradas de autotexto das versões anteriores. Entretanto, com os blocos de construção, você poderá organizar as entradas de modo a permitir a determinação do modo como um usuário as utilizará. Um bloco de construção personalizado ajuda os usuários a inserir conteúdo avançado em qualquer lugar em um documento usando uma lista suspensa formatada. Quando usados juntamente com os controles de conteúdo, os blocos de construção podem permitir a você desenvolver soluções poderosas de maneira muito rápida e fácil.

O modelo de objeto dos blocos de construção inclui três novos objetos e quatro novas coleções. Eles permitem a você criar uma estrutura organizacional que atende suas necessidades específicas e modificar a estrutura para uma solução específica. Os novos objetos e coleções são relacionados na tabela seguir.

Nome Descrição
Buildingblock Uma entrada de bloco de construção específica.
BuildingBlocks Uma coleção de entradas de bloco de construção em um modelo que são do mesmo tipo e categoria.
BuildingBlockEntries Uma coleção de todos os blocos de construção em um modelo.
BuildingBlockType Um tipo de bloco de construção.
BuildingBlockTypes Uma coleção dos tipos de bloco de construção.
Categoria Uma categoria do bloco de construção.
Categories Uma coleção de categorias de bloco de construção.

Entender blocos de construção

Os blocos de construção são organizados por tipo e categoria. Os tipos de bloco de construção são compostos por um número limitado de constantes WdBuildingBlockTypes . Embora exista um número limitado dessas constantes, esse número não é pequeno. Há 35 constantes WdBuildingBlockTypes diferentes. Esses tipos ajudam você a definir e a organizar seus blocos de construção e, embora você não possa criar tipos de bloco de construção adicionais, poderá criar um número ilimitado de categorias para cada tipo.

As categorias são compostas por um número ilimitado de cadeias de caracteres que você poderá definir para organizar seus blocos de construção personalizados. Os blocos de construção são armazenados em modelos. Por padrão, os modelos incluídos no Word têm categorias de bloco de construção como "Geral" e "Interno". Porém, você não está limitado apenas às categorias que estão incluídas nesses modelos. Uma categoria poderá ser qualquer cadeia de caracteres definida por você. Os tipos e categorias são explicados mais adiante neste tópico.

Como você pode organizar os blocos de construção em tipos e categorias, eles poderão ser muito flexíveis. Por exemplo, você poderá ter um bloco de construção nomeado como "Título" que tem um tipo de wdTypeBibliography e uma categoria de "Títulos de Livro" e um outro bloco de construção nomeado como "Título" que tem um tipo de wdTypeBibliography e uma categoria de "Títulos de Filmes" e, em seguida, você poderá ter ainda outro bloco de construção nomeado como "Título" que tenha um tipo de wdTypeCustomHeaders e uma categoria de "Títulos de Livros" e assim por diante. A incrível flexibilidade que os blocos de construção permitem a criação de soluções personalizadas sem precisar escrever códigos.

Entretanto, os blocos de construção também são programáveis. Você poderá criar novos blocos de construção, excluir blocos de construção e gerenciar blocos de construção de forma programada. Você também pode observar quando os usuários inserirem novos blocos de construção em um documento usando o evento BuildingBlockInsert . Além disso, você poderá usar os blocos de construção com controles de conteúdo para dar a você ainda um maior controle em relação a quais blocos de construção os usuários podem inserir em seus documentos. Por exemplo, você poderá usar um controle de conteúdo do bloco de construção para filtrar os tipos de blocos de construção que um usuário visualiza, o que significa que o usuário não pode inserir um bloco de construção em um documento que não é permitido em um local específico no documento. Há vários exemplos nas seções a seguir que mostram como usar os objetos de bloco de construção para trabalhar com blocos de construção de forma programada.

Tarefas simples

As seções a seguir fornecem exemplos simples de como fazer tarefas específicas usando os objetos do bloco de construção. Você pode localizar exemplos de código adicional nos tópicos do objeto e em muitos dos tópicos do membro.

Criando um bloco de construção personalizado

Criar um bloco de construção personalizado é tão simples quanto usar o método Add para a coleção BuildingBlockEntries . Você também pode usar o método Add para a coleção BuildingBlocks ; no entanto, esse método pode gerar um erro em tempo de execução se não houver blocos de construção no momento para o tipo ou categoria especificados. Conforme explicado na tabela de objetos, a coleção BuildingBlocks é uma coleção de blocos de construção para um tipo e categoria específicos. A coleção BuildingBlocksEntries contém todos os blocos para um modelo. Portanto, a forma preferida de adicionar novos blocos de construção de forma programada, é usar o método Add para a coleção BuildingBlockEntries.

O exemplo de código a seguir recolher a seleção atual, cria um intervalo e especifica o texto para o intervalo e, em seguida, adiciona a seleção como um bloco de construção personalizado em uma coleção de entradas de bloco de construção no modelo anexado ao documento atual.

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

Adicionando uma nova categoria

Conforme mencionado anteriormente, você poderá adicionar um número ilimitado de categorias. Entretanto, não existe o método Add para a coleção Categories. Portanto, para adicionar uma nova categoria à coleção, será necessário adicionar um novo bloco de construção. Por exemplo, no exemplo do código anterior, se a categoria "Títulos de Livro" não existir quando você executar o código, o Word a adicionará à coleção Categories.

Acessando um bloco de construção existente

Em algum momento você vai querer acessar um dos blocos de construção que você tem, seja um bloco de construção personalizado ou um dos blocos de construção internos. Você poderia usar a coleção BuildingBlockEntries; entretanto, devido aos blocos de construção poderem compartilhar o mesmo nome, você precisaria identificar o tipo e a categoria do bloco de construção antes de saber qual você deseja retornado. Portanto, a melhor maneira de acessar os blocos de construção existentes é por meio da coleção BuildingBlocks.

O exemplo de código a seguir acessa o bloco de construção que você adicionou no exemplo de código anterior.

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

Inserir um bloco de construção em um documento

Depois de acessar um bloco de construção, use o método Insert do objeto BuildingBlock para inserir em um documento. O exemplo de código a seguir expande o exemplo do código anterior adicionando uma linha para inserir a construção em um documento ativo no Ponto de Inserção (ou para substituir o texto selecionado, se ele estiver selecionado).

Observação

Quando você insere um bloco de construção usando a faixa de opções, o Word determina automaticamente determinadas coisas sobre o bloco de construção, como onde inseri-lo; no entanto, quando você insere um bloco de construção por meio do modelo de objeto, nenhuma dessas inteligências internas acontece automaticamente. Por exemplo, quando você insere um bloco de construção de cabeçalho usando a faixa de opções, o Word determina automaticamente a substituição do cabeçalho existente. Ao inserir o mesmo bloco de construção do cabeçalho usando o modelo do objeto, será necessário especificar explicitamente onde colocar o texto do bloco de construção.

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

Filtrando uma lista de blocos de construção em um controle de conteúdo

Se você combinar os blocos de construção com controles de conteúdo, será possível filtrar quais blocos de construção um usuário poderá acessar. Você faz isso usando um controle de conteúdo e um evento. Quando um usuário insere um controle de conteúdo, o evento ContentControlOnEnter para o objeto Document é acionado. Esse evento tem um parâmetro para o controle de conteúdo ativo. Você poderá determinar se o controle de conteúdo é de bloco de construção. Se for, use a propriedade BuildingBlockType e a propriedade BuildingBlockCategory para identificar qual tipo e categoria usar para filtrar a lista de blocos de construção disponíveis para o controle de conteúdo. Isto especifica quais blocos de construção serão exibidos na lista suspensa do cabeçalho do controle de conteúdo.

O exemplo de código a seguir assume que existe pelo menos um controle de conteúdo no documento. Se o controle de conteúdo for de construção, a lista de blocos de construção exibida no bloco de construção do cabeçalho do controle de conteúdo incluirá somente aqueles adicionados, usando a sub-rotina AddCustomBuildingBlock mostrada anteriormente neste tópico. Para obter mais informações sobre os controles de conteúdo, consulte Trabalhando com controles de conteúdo.

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

Suporte e comentários

Tem dúvidas ou quer enviar comentários sobre o VBA para Office ou sobre esta documentação? Confira Suporte e comentários sobre o VBA para Office a fim de obter orientação sobre as maneiras pelas quais você pode receber suporte e fornecer comentários.