Estou usando algumas formas em um documento e recentemente mudei de criá-las em tempo real (lento!) para usar blocos de construção. Insiro os blocos via código VBA, de um formulário.
Os blocos de construção estão localizados em um arquivo separado.
Isso tudo funciona, mas por algum motivo os blocos de construção não estão presentes quando carrego o documento ou qualquer novo documento. Recebo o erro 5941 "O membro da coleção não existe".
O código VBA referencia explicitamente o arquivo de bloco de construção, que existe.
Const blockpath = "C:\Users\XXX\AppData\Roaming\Microsoft\Document Building Blocks\1030\16\Building Blocks.dotx"
Dim r As Range
Set r = Application.Templates(blockpath).BuildingBlockEntries("XYZ").Insert(Selection.Range, True) ' range containing inserted block
Quando clico UMA VEZ nos blocos de construção da faixa de opções, o código VBA funciona e os elementos estão disponíveis.
Pergunta O que posso fazer no código para verificar isso e disponibilizar os blocos desde o início?
Editar:
- Nenhum "modelo de anexação" ou similar é adicionado ao VBA quando insiro os blocos de construção com o gravador de macro.
- Antes de clicar no botão de blocos de construção, o projeto VBA não contém os blocos de construção. Depois, dá.
O comportamento do Word é não carregar Building Blocks até que um seja chamado.
Você pode forçar o carregamento com o seguinte comando:
Se já estiverem carregados, isso é redundante, mas não prejudica nada.
Você também pode carregar seu suporte de blocos de construção como um Add-In.
Isso pode ser feito colocando-o em sua pasta de inicialização do Word ou através do vba.
Quando o template que contém o BB é carregado como Add-In, ele fica imediatamente disponível para vba. Eu adiciono rotineiramente meus blocos de construção personalizados aos meus suplementos de modelo, em vez de no Building Blocks.dotx genérico. Dessa forma, se eu tiver código referindo-se a eles no Add-In, eles sempre estarão lá. O mesmo aconteceria se eu o adicionasse a um modelo de documento.
Aqui está minha escrita sobre onde os Building Blocks podem (e devem) ser armazenados .
Aqui está minha escrita no código para inserir um bloco de construção . O código a ser usado depende do local de armazenamento.