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.