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

将XLS转为XLSM后导入模块时出现Error 91对象未设置错误

解决VBA Error 91:对象变量未设置(XLS转XLSM并导入模块)

核心错误

你声明了xlsmTarget As Workbook,但从未给这个变量赋值任何实际的工作簿对象,它始终处于Nothing状态,调用xlsmTarget.VBProject自然会触发Error 91。

其他需要修正的问题

  • 未声明WorkFile变量,且误用了未定义的myPath(应使用你已定义的Path变量)
  • 后缀判断逻辑错误:.xls是3字符后缀,Right(WorkFile,4)无法正确识别,且未考虑文件名中包含多个.的情况
  • SaveAs语句末尾多了一个多余逗号,会导致语法错误
  • 依赖ActiveWorkbook不够稳定,直接用对象变量引用工作簿更可靠

修正后的完整代码

Sub ConvertXLSFilesToXLSM()
    Dim Path As String
    Dim DestPath As String
    Dim xlsmTarget As Workbook
    Dim WorkFile As String
    Const ModulePath As String = "C:\New Name Test\Testv3\CreateUniqueContainers.bas"

    Path = "C:\New Name Test\Testv3\Files\"
    DestPath = "C:\New Name Test\Testv3\Files\"
    WorkFile = Dir(Path & "*.xls")

    Do While WorkFile <> ""
        ' 准确筛选需要处理的xls文件,排除已存在的xlsm文件
        If LCase(Right(WorkFile, 4)) <> ".xlsm" And LCase(Right(WorkFile, 3)) = "xls" Then
            ' 将打开的工作簿直接赋值给对象变量
            Set xlsmTarget = Workbooks.Open(Filename:=Path & WorkFile)
            ' 另存为xlsm格式,替换原xls后缀
            xlsmTarget.SaveAs Filename:= _
                DestPath & Left(WorkFile, Len(WorkFile) - 4) & ".xlsm", _
                FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
            ' 安全导入VBA模块
            xlsmTarget.VBProject.VBComponents.Import ModulePath
            xlsmTarget.Save
            xlsmTarget.Close
        End If
        WorkFile = Dir()
    Loop
End Sub

关键配置提醒

要成功导入VBA模块,必须在Excel中开启信任对VBA项目对象模型的访问:

  1. 点击「文件」→「选项」→「信任中心」
  2. 打开「信任中心设置」→「宏设置」
  3. 勾选「信任对VBA项目对象模型的访问」并确认

内容的提问来源于stack exchange,提问作者Scott Manning

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 16:20:58