Las barras de comandos de los complementos no se muestran ni quitan en Excel 2013 o versiones posteriores al cargar o descargar los complementos

Síntomas

Al usar complementos en Microsoft Excel 2013 o versiones posteriores, experimenta los siguientes problemas.

Problema 1

Al cargar un complemento de Excel (xlam) o un complemento de Excel 97-2003 (xla), las barras de comandos del complemento no se muestran automáticamente. En su lugar, debe cerrar todos los libros y, a continuación, reiniciar Excel para mostrar las barras de comandos.

Problema 2

Al descargar un complemento de Excel (.xlam) o un complemento de Excel 97-2003 (.xla) o cerrar un libro habilitado para macros de Excel (.xlsm) que contiene barras de comandos, las barras de comandos del complemento o el libro habilitado para macros no se quitan de todos los libros abiertos.

Causa

Estos problemas se producen debido a la interfaz de documento único (SDI) en Excel 2013 o posterior. Cuando se usa un objeto CommandBar heredado para crear elementos de menú, los elementos de menú se agregan a la pestaña Add-Ins de la cinta de opciones. En Excel 2013 o posterior, cada libro tiene su propia cinta de opciones. Por lo tanto, al cargar o descargar complementos después de crear la cinta de opciones del libro, la cinta de opciones no se actualiza.

En el ejemplo de código siguiente se crean elementos de menú mediante el objeto CommandBar:

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

Solución alternativa

Para solucionar el problema 1, cierre todos los libros abiertos y reinicie Excel.

Para solucionar el problema 2, use uno de los métodos siguientes:

  • Reemplace las barras de comandos por un elemento de cinta de opciones (XML) en el complemento o en el libro habilitado para macros. Para obtener más información sobre la cinta de opciones (XML), vea XML de la cinta de opciones.

  • En el evento Workbook_BeforeClose del complemento o del libro habilitado para macros, recorra todas las ventanas abiertas y quite las barras de comandos. A continuación se muestra un ejemplo de código:

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

Nota:

En este código, el marcador de posición <ToolbarName> representa un nombre de barra de comandos.