将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项目对象模型的访问:
- 点击「文件」→「选项」→「信任中心」
- 打开「信任中心设置」→「宏设置」
- 勾选「信任对VBA项目对象模型的访问」并确认
内容的提问来源于stack exchange,提问作者Scott Manning
相关产品推荐
相关产品推荐

