Панели команд надстроек не отображаются и не удаляются в Excel 2013 или более поздней версии при загрузке или выгрузке надстроек

Симптомы

При использовании надстроек в Microsoft Excel 2013 или более поздней версии возникают следующие проблемы.

Проблема 1

При загрузке надстройки Excel (xlam) или надстройки Excel 97-2003 (xla) панели команд надстройки не отображаются автоматически. Вместо этого необходимо закрыть все книги, а затем перезапустить Excel, чтобы отобразить панели команд.

Проблема 2

При выгрузке надстройки Excel (.xsm) или надстройки Excel 97–2003 (.xla) или закрытии книги Excel с поддержкой макросов (XLSM), содержащей панели команд, панели команд надстройки или книги с поддержкой макросов не удаляются из всех открытых книг.

Причина

Эти проблемы возникают из-за интерфейса SDI в Excel 2013 или более поздней версии. При использовании устаревшего объекта CommandBar для создания элементов меню элементы меню добавляются на вкладку Add-Ins ленты. В Excel 2013 или более поздней версии каждая книга имеет собственную ленту. Поэтому при загрузке или выгрузке надстроек после создания ленты книги лента не обновляется.

В следующем примере кода создаются элементы меню с помощью объекта CommandBar:

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

Обходной путь

Чтобы обойти проблему 1, закройте все открытые книги, а затем перезапустите Excel.

Чтобы обойти проблему 2, используйте один из следующих методов:

  • Замените панели команд элементом ленты (XML) в надстройке или книге с поддержкой макросов. Дополнительные сведения о ленте (XML) см. в разделе Xml ленты.

  • В Workbook_BeforeClose события надстройки или книги с поддержкой макросов циклически просмотрите все открытые окна и удалите панели команд. Ниже приведен пример кода:

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

Примечание.

В этом коде заполнитель <ToolbarName> представляет имя панели команд.