As barras de comandos dos suplementos não são apresentadas ou removidas no Excel 2013 ou posterior quando carrega ou descarrega os suplementos

Sintomas

Quando utiliza suplementos no Microsoft Excel 2013 ou posterior, tem os seguintes problemas.

Problema 1

Quando carrega um suplemento do Excel (xlam) ou um suplemento do Excel 97-2003 (xla), as barras de comandos do suplemento não são apresentadas automaticamente. Em vez disso, tem de fechar todos os livros e, em seguida, reiniciar o Excel para apresentar as barras de comando.

Problema 2

Quando descarrega um suplemento do Excel (.xlam) ou um suplemento do Excel 97-2003 (.xla) ou fecha um livro com permissão para macros do Excel (.xlsm) que contém barras de comandos, as barras de comandos do suplemento ou do livro com permissão para macros não são removidas de todos os livros abertos.

Causa

Estes problemas ocorrem devido à Interface de Documento Único (SDI) no Excel 2013 ou posterior. Quando utiliza um objeto legado da Barra de Comandos para criar itens de menu, os itens de menu são adicionados ao separador Add-Ins do friso. No Excel 2013 ou posterior, cada livro tem o seu próprio friso. Por conseguinte, quando carrega ou descarrega suplementos após a criação do friso do livro, o friso não é atualizado.

O seguinte exemplo de código cria itens de menu com o objeto Barra de Comandos:

Application.CommandBars("Worksheet Menu Bar").Controls.Add Type:=msoControlPopup

Solução

Para resolver o problema 1, feche todos os livros abertos e, em seguida, reinicie o Excel.

Para resolver o problema 2, utilize um dos seguintes métodos:

  • Substitua as barras de comandos por um item do Friso (XML) no suplemento ou no livro com permissão para macros. Para obter mais informações sobre o Friso (XML), veja XML do Friso.

  • No Workbook_BeforeClose evento do suplemento ou do livro com permissão para macros, percorra todas as janelas abertas e remova as barras de comandos. Segue-se um exemplo de código:

    For Each wnd In Application.Windows
            wnd.Activate
            Application.CommandBars("<ToolbarName>").Delete
    Next wnd
    

Nota

Neste código, o marcador < de posição ToolbarName> representa um nome de barra de comandos.