You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何遍历所有加载项模块,找到指定模块并禁用对应加载项

问题描述

我开发了一款在组织内广泛使用的加载项,目前正在开发新版本,希望新版本能找到并禁用旧版本加载项。我原本尝试通过以下代码遍历Application.AddIns并根据名称禁用加载项:

Dim objAddIn as Object
Dim mdl as string

mdl = "old_version"

For Each objAddIn in Application.AddIns
   If objAddIn.Name = mdl then objAddIn.Installed = False
Next objAddIn

但问题是用户手动安装时可自定义加载项名称,存在多种变体。不过旧版本加载项内的模块名称固定,因此希望遍历所有加载项的模块,找到指定模块后禁用其所属加载项,但操作Application.AddIns时无法遍历每个加载项的模块,请问如何原生实现该功能?

解决方案

要通过固定模块名称定位并禁用旧版加载项,可借助Office的VBE对象模型实现,具体步骤如下:

  • 开启VBA工程对象模型访问权限:
    先在Office应用的「信任中心」→「宏设置」中勾选「信任对VBA工程对象模型的访问」,否则代码会因权限不足报错。

  • 遍历加载项工程与模块:
    直接通过Application.VBE.VBProjects遍历所有已加载的VBA工程,先筛选出加载项类型的工程,再遍历其内部的所有模块,匹配到目标模块后,找到对应的加载项并禁用。

以下是完整的实现代码:

Sub DisableOldAddInByModule()
    Dim vbProj As VBIDE.VBProject
    Dim vbComp As VBIDE.VBComponent
    Dim targetModuleName As String
    Dim addInObj As AddIn
    
    targetModuleName = "OldVersionCore" '替换为旧版加载项的固定模块名称
    
    '遍历所有已加载的VBA工程
    For Each vbProj In Application.VBE.VBProjects
        '判断当前工程是否为加载项类型
        If vbProj.Type = vbext_pt_AddIn Then
            '遍历工程内的所有组件(模块、类模块等)
            For Each vbComp In vbProj.VBComponents
                If vbComp.Name = targetModuleName Then
                    '匹配到目标模块,查找对应的加载项并禁用
                    For Each addInObj In Application.AddIns
                        '通过文件路径匹配,比名称/ProgId更准确
                        If addInObj.FullName = vbProj.FileName Then
                            addInObj.Installed = False
                            MsgBox "已成功禁用旧版加载项"
                            Exit Sub '找到后直接退出,避免重复操作
                        End If
                    Next addInObj
                End If
            Next vbComp
        End If
    Next vbProj
    
    MsgBox "未找到目标旧版加载项"
End Sub
  • 补充注意事项:
    • 若加载项的文件路径存在特殊字符或权限限制,可尝试用UCase(addInObj.FullName) = UCase(vbProj.FileName)忽略大小写匹配。
    • 代码运行时需要确保Office应用处于非保护视图状态,且用户有足够的权限修改加载项设置。

内容的提问来源于stack exchange,提问作者David Vinnicombe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 05:18:20