如何通过编程启用非XLSM/XLAM/COM类型的Excel加载项?
问题:startFromScratch="true"导致第三方Add-ins加载项无法访问的解决思路
背景与问题
- 为团队开发4个XLAM加载项,共享功能区命名空间,自定义功能区交互正常,支持内部版本推送更新。
- 为精简功能区,将RibbonX设置为
startFromScratch="true"以移除无关Office选项卡,导致正在评估的第三方Add-Ins类型加载项无法访问(该类型属于O365开发工具选项卡“加载项”组的第一个选项,区别于Excel加载项、COM加载项)。 - 手动启用该加载项后,它会在功能区显示预期的新选项卡,但目前无法实现编程启用,也无法通过RibbonX识别并显示其选项卡。
可行解决思路
方案1:编程启用Web类型Add-Ins
你提到的Add-Ins实际是基于Web的Office加载项,对应Office对象模型的WebAddIns集合,可通过VBA编程启用:
- 先获取目标加载项的名称或ID:
手动启用加载项后,在VBA编辑器中执行以下代码,在立即窗口查看加载项信息:Sub ListWebAddIns() Dim addin As Office.WebAddIn For Each addin In Application.WebAddIns Debug.Print "名称:" & addin.Name & ",ID:" & addin.Id Next addin End Sub - 在Excel启动子程序中自动启用:
将以下代码加入XLAM的Auto_Open过程(或Workbook_Open):
注意:需确保VBA项目已引用Microsoft Office xx.x Object Library(对应你的Office版本)。Sub Auto_Open() Dim targetAddIn As Office.WebAddIn On Error Resume Next ' 替换为目标加载项的名称或ID Set targetAddIn = Application.WebAddIns("第三方加载项名称") If Not targetAddIn Is Nothing Then If Not targetAddIn.Enabled Then targetAddIn.Enabled = True End If On Error GoTo 0 End Sub
方案2:在startFromScratch模式下显式显示第三方选项卡
当startFromScratch="true"时,所有原生/第三方选项卡会被默认隐藏,需在RibbonX中显式声明要显示的选项卡:
- 获取第三方选项卡的ID:
- 使用Custom UI Editor for Microsoft Office工具,打开已启用该加载项的Excel文件,查看功能区XML,找到第三方选项卡的
idMso(原生ID)或自定义ID。 - 也可通过Ribbon回调结合VBA遍历控件获取(需先在RibbonX中定义
onLoad回调保存IRibbonUI对象)。
- 使用Custom UI Editor for Microsoft Office工具,打开已启用该加载项的Excel文件,查看功能区XML,找到第三方选项卡的
- 修改你的RibbonX代码,添加对第三方选项卡的可见性设置:
若第三方选项卡是动态生成的,可通过<customUI xmlns="http://schemas.microsoft.com/office/2009/07/customui" startFromScratch="true"> <ribbon> <tabs> <!-- 你的自定义团队工具选项卡 --> <tab id="TeamToolsTab" label="团队工具"> <group id="ToolGroup" label="核心功能"> <!-- 自定义按钮配置 --> </group> </tab> <!-- 显式显示第三方加载项的选项卡 --> <tab idMso="ThirdPartyTabIDMso" visible="true"/> <!-- 若为自定义ID,替换为:<tab id="ThirdPartyCustomTab" visible="true"/> --> </tabs> </ribbon> </customUI>getVisible回调函数动态控制显示状态。
关键注意点
- 加载项类型区分:Add-Ins是Web加载项(
WebAddIns集合),Excel加载项是XLAM/XLA(AddIns集合),COM加载项是DLL类型(COMAddIns集合),不要混淆操作对象。 - 测试前需关闭所有Excel进程,确保加载项状态被正确读取和保存。
内容的提问来源于stack exchange,提问作者Peter
相关产品推荐
相关产品推荐

