Opdrachtbalken van invoegtoepassingen worden niet weergegeven of verwijderd in Excel 2013 of hoger wanneer u de invoegtoepassingen laadt of verwijdert

Symptomen

Wanneer u invoegtoepassingen gebruikt in Microsoft Excel 2013 of hoger, ondervindt u de volgende problemen.

Probleem 1

Wanneer u een Excel-invoegtoepassing (xlam) of een Excel 97-2003-invoegtoepassing (xla) laadt, worden de opdrachtbalken van de invoegtoepassing niet automatisch weergegeven. In plaats daarvan moet u alle werkmappen sluiten en Excel opnieuw starten om de opdrachtbalken weer te geven.

Probleem 2

Wanneer u een Excel-invoegtoepassing (.xlam) of een Excel 97-2003-invoegtoepassing (.xla) verwijdert of een Excel-werkmap met macro's (.xlsm) met opdrachtbalken sluit, worden de opdrachtbalken van de invoegtoepassing of de werkmap met macro's niet uit alle geopende werkmappen verwijderd.

Oorzaak

Deze problemen treden op vanwege de Single Document Interface (SDI) in Excel 2013 of hoger. Wanneer u een verouderd CommandBar-object gebruikt om menu-items te maken, worden de menu-items toegevoegd aan het tabblad Add-Ins van het lint. In Excel 2013 of hoger heeft elke werkmap een eigen lint. Wanneer u invoegtoepassingen laadt of verwijdert nadat het lint van de werkmap is gemaakt, wordt het lint daarom niet bijgewerkt.

In het volgende codevoorbeeld worden menu-items gemaakt met behulp van het commandbar-object:

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

Tijdelijke oplossing

Als u probleem 1 wilt omzeilen, sluit u alle geopende werkmappen en start u Excel opnieuw.

Gebruik een van de volgende methoden om probleem 2 te omzeilen:

  • Vervang opdrachtbalken door een lintitem (XML) in de invoegtoepassing of de werkmap met macro's. Zie Lint-XML voor meer informatie over het lint (XML).

  • In het Workbook_BeforeClose geval van de invoegtoepassing of de werkmap met macro's door alle geopende vensters en de opdrachtbalken verwijderen. Hier volgt een codevoorbeeld:

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

Opmerking

In deze code vertegenwoordigt de tijdelijke aanduiding <ToolbarName> een opdrachtbalknaam.