Ao executar uma macro VBA para inserir um Quick Part no Word, você pode receber o erro de tempo de execução 5398 com a mensagem “O membro solicitado da coleção não existe.” Esse erro ocorre especificamente quando a macro tenta acessar um building block que não está presente no template ou documento de destino. A causa raiz é geralmente uma incompatibilidade entre o nome, galeria ou categoria do building block referenciado no código e o que realmente está armazenado no Organizador de Building Blocks. Este artigo explica por que o erro 5398 aparece durante a inserção de Quick Parts via VBA e fornece etapas precisas para corrigir seu código e ambiente.
Principais conclusões: Corrigindo o erro VBA 5398 ao inserir Quick Parts
- Método BuildingBlockEntries.Item: O erro 5398 significa que o nome, galeria ou categoria específica do building block não existe no template referenciado pela macro.
- Propriedade Application.Templates: A macro deve ter como alvo o template correto (Normal.dotm, .dotx personalizado ou .dotm) que contém o Quick Part; caso contrário, a coleção estará vazia.
- Método BuildingBlock.Insert: Após localizar o building block correto, chame Insert onde o cursor de seleção está; a falha ao especificar um Range válido também aciona o erro 5398.
Por que o erro VBA 5398 ocorre ao inserir Quick Parts
O Word armazena Quick Parts como building blocks dentro de templates. Cada building block pertence a uma galeria (como wdBuiltInGalleryQuickParts) e a uma categoria (como “Geral” ou um nome personalizado). Quando seu código VBA executa BuildingBlockEntries.Item("MeuQuickPart"), o Word pesquisa a coleção de building blocks do template anexado ao documento ou referenciado explicitamente no código. Se o nome, galeria ou categoria exatos não corresponderem, o Word lança o erro 5398.
Três condições principais causam essa incompatibilidade:
- O building block está armazenado em um template diferente daquele que a macro está consultando. Por exemplo, o Quick Part reside no Normal.dotm, mas a macro lê do template anexado ao documento ativo.
- O nome do building block no argumento
Itemdo VBA tem um erro de digitação ou usa maiúsculas/minúsculas diferentes do nome armazenado. Os nomes dos building blocks diferenciam maiúsculas de minúsculas. - A constante da galeria ou a string da categoria no código não corresponde à galeria ou categoria onde o building block realmente reside. Um Quick Part armazenado na categoria “Personalizado” não pode ser encontrado pesquisando “Geral”.
Entender essas três causas é o primeiro passo para resolver o erro. A correção envolve verificar a localização exata do building block e ajustar o código VBA de acordo.
Etapas para identificar e corrigir a referência do building block
Siga estas etapas para localizar o building block correto e modificar sua macro para evitar o erro 5398.
- Abra o Organizador de Building Blocks
Pressione Alt+F11 para abrir o editor VBA e depois retorne ao Word. Pressione Alt+N, B, O (ou vá em Inserir > Quick Parts > Organizador de Building Blocks). Isso mostra todos os building blocks no template atual. - Identifique o nome, galeria e categoria exatos do building block
No Organizador de Building Blocks, localize o Quick Part que deseja inserir. Anote o Nome, a Galeria (por exemplo, Quick Parts) e a Categoria (por exemplo, Geral). Clique com o botão direito na entrada e escolha Editar Propriedades para ver o nome exato sem espaços à direita. - Determine qual template contém o building block
No Organizador de Building Blocks, a coluna template mostra o template pai (por exemplo, Normal.dotm ou um template personalizado). Anote o nome completo do arquivo. Sua macro deve referenciar esse template específico. - Atualize seu código VBA para ter como alvo o template correto
Substitua qualquer referência genérica de template pelo template específico. Por exemplo, altere:Set objTemplate = ActiveDocument.AttachedTemplate
para:Set objTemplate = Application.Templates("Normal.dotm")
Substitua “Normal.dotm” pelo nome exato do template da etapa 3. - Use as constantes de galeria e categoria corretas
Verifique a constante da galeria. Para Quick Parts, usewdBuiltInGalleryQuickParts(valor 17). Para a categoria, use a string exata da etapa 2. Exemplo:Set objBB = objTemplate.BuildingBlockEntries.Item("MeuQuickPart")
Se a categoria não for “Geral”, inclua o parâmetro Category ao usar a coleçãoBuildingBlocks:Set objBB = objTemplate.BuildingBlockTypes(wdBuiltInGalleryQuickParts).Categories("Personalizado").BuildingBlocks("MeuQuickPart") - Insira o building block na seleção
Após obter o objetoBuildingBlockcorreto, chame o métodoInsert. Exemplo:objBB.Insert Selection.Range
Isso coloca o Quick Part na posição atual do cursor. Se precisar de um intervalo específico, useActiveDocument.Range(Start:=0, End:=0)para inserir no início do documento. - Teste a macro
Execute a macro atualizada. Se o erro 5398 ainda aparecer, volte à etapa 1 e verifique novamente o nome do building block em busca de caracteres ocultos ou espaços. UseDebug.Print objTemplate.BuildingBlockEntries.Countpara confirmar que o template contém building blocks.
Se o erro 5398 persistir após corrigir o código
Mesmo após ajustar o template, nome, galeria e categoria, o erro 5398 ainda pode ocorrer devido a fatores menos óbvios. As seções abaixo cobrem as causas restantes mais frequentes.
O building block foi criado em uma versão de idioma diferente do Word
Os nomes dos building blocks e as strings de categoria são específicos do idioma. Se o Quick Part foi criado em uma versão francesa ou alemã do Word, o nome da galeria pode ser diferente. No Organizador de Building Blocks, examine a coluna Galeria — ela pode mostrar “QuickParties” em vez de “Quick Parts”. Use a string localizada exata em seu código VBA ou, melhor, use a constante numérica para a galeria (por exemplo, 17 para Quick Parts) para evitar dependência de idioma.
A macro é executada antes do template ser totalmente carregado
Se sua macro for executada durante o evento Document_Open ou imediatamente após o Word iniciar, a coleção de building blocks pode ainda não estar disponível. Adicione um pequeno atraso usando Application.Wait Now + TimeValue("00:00:01") ou chame DoEvents antes de acessar o template. Isso garante que o Organizador de Building Blocks esteja totalmente inicializado.
O building block está armazenado em um suplemento de template global
Quick Parts podem residir em templates globais carregados via Arquivo > Opções > Suplementos. Se a macro verificar apenas o template anexado ao documento ativo, ela perderá building blocks armazenados em um template global. Percorra Application.Templates e verifique a coleção BuildingBlockEntries de cada template até encontrar o bloco desejado.
Padrões de código VBA: referência direta vs. loop por todos os templates
| Item | Referência Direta ao Template | Loop por Todos os Templates |
|---|---|---|
| Complexidade do código | Atribuição simples de uma linha | Requer loop For Each e tratamento de erros |
| Desempenho | Rápido — consulta a um único template | Mais lento — verifica todos os templates carregados |
| Risco de erro 5398 | Alto se o nome do template estiver errado | Baixo — encontra o bloco independentemente da localização |
| Recomendado para | Template conhecido com bloco garantido | Documentos compartilhados ou origens de template desconhecidas |
Conclusão
O erro 5398 no VBA do Word ao inserir Quick Parts é causado por uma incompatibilidade entre a referência do building block no código e o building block realmente armazenado. Ao verificar o template, nome, galeria e categoria por meio do Organizador de Building Blocks, você pode corrigir sua macro e eliminar o erro. Para um código robusto, percorra todos os templates carregados ou use constantes numéricas de galeria para evitar problemas de idioma. Após corrigir a referência, o método BuildingBlock.Insert colocará o Quick Part exatamente onde for necessário.