Kommandofält för tillägg visas eller tas inte bort i Excel 2013 eller senare när du läser in eller inaktiverar tilläggen

Anteckning

Office 365 ProPlus byter namn till Microsoft 365-appar för företag. Mer information om den här ändringen finns i det här blogginlägget.

Symptom

När du använder tillägg i Microsoft Excel 2013 eller senare får du följande problem.

Ärende 1

När du läser in ett Excel-tillägg (xlam) eller ett Excel 97-2003-tillägg (xla) visas inte tilläggets kommandofält automatiskt. I stället måste du stänga alla arbetsböcker och sedan starta Excel att visa kommandofälten.

Ärende 2

När du stänger ett Excel-tillägg (.xlam) eller ett Excel 97-2003-tillägg (.xla) eller stänger en makroaktiverad Excel-arbetsbok (.xlsm) som innehåller kommandofält tas inte kommandofälten i tillägget eller den makroaktiverade arbetsboken bort från alla öppna arbetsböcker.

Orsak

De här problemen uppstår på grund av SDI (Single Document Interface) i Excel 2013 eller senare. När du använder ett äldre kommandofältsobjekt för att skapa menyalternativ läggs menyalternativen till på menyfliken Add-Ins i menyfliksområdet. I Excel 2013 eller senare har varje arbetsbok ett eget menyfliksområde. När du läser in eller inaktiverar tillägg efter att menyfliksområdet i arbetsboken har skapats uppdateras därför inte menyfliksområdet.

Följande kodexempel skapar menyalternativ med hjälp av kommandofältets objekt:

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

Lösning

För att komma runt problemet 1 stänger du alla öppna arbetsböcker och startar sedan om Excel.

Använd någon av följande metoder för att komma runt problemet 2:

  • Ersätt kommandofälten med ett XML-objekt (Menyfliksområde) i tillägget eller den makroaktiverade arbetsboken. Mer information om XML (menyfliksområdet) finns i XML i menyfliksområdet.

  • I Workbook_BeforeClose händelse av tillägget eller den makroaktiverade arbetsboken går du igenom alla öppna fönster och tar bort kommandofälten. Följande är ett kodexempel:

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

Anteckning

I den här koden representerar platshållaren ett kommandofältsnamn.