Por que a inserção de Quick Parts via VBA no Word retorna o erro 5398 nos Building Blocks
🔍 WiseChecker

Por que a inserção de Quick Parts via VBA no Word retorna o erro 5398 nos Building Blocks

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.

ADVERTISEMENT

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 Item do 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.

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Use as constantes de galeria e categoria corretas
    Verifique a constante da galeria. Para Quick Parts, use wdBuiltInGalleryQuickParts (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ção BuildingBlocks:
    Set objBB = objTemplate.BuildingBlockTypes(wdBuiltInGalleryQuickParts).Categories("Personalizado").BuildingBlocks("MeuQuickPart")
  6. Insira o building block na seleção
    Após obter o objeto BuildingBlock correto, chame o método Insert. Exemplo:
    objBB.Insert Selection.Range
    Isso coloca o Quick Part na posição atual do cursor. Se precisar de um intervalo específico, use ActiveDocument.Range(Start:=0, End:=0) para inserir no início do documento.
  7. 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. Use Debug.Print objTemplate.BuildingBlockEntries.Count para confirmar que o template contém building blocks.

ADVERTISEMENT

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

ADVERTISEMENT

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.

ADVERTISEMENT