加载或卸载加载项时,不会在 Excel 2013 或更高版本中显示或删除加载项的命令栏

症状

在 Microsoft Excel 2013 或更高版本中使用加载项时,会遇到以下问题。

问题 1

当您加载 Excel 加载项 (xlam) 或 Excel 97-2003 加载项 (xla) 时,不会自动显示加载项的命令栏。 相反,您必须关闭所有工作簿,然后重新启动 Excel 以显示命令栏。

问题 2

当您卸载 Excel 外接程序 (.xlam) 或 Excel 97-2003 外接程序 (.xla) 或关闭包含命令栏的 Excel 宏 (.xlsm) 时,不会从所有打开的工作簿中删除加载项或启用宏的工作簿的命令栏。

原因

出现这些问题的原因是 Excel 2013 或更高版本中的单文档界面 (SDI) 。 使用旧版 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> 表示命令栏名称。