在 SolidWorks(简称 SW)运行宏时出现 “运行时错误 91:对象变量或 With 块变量未设置”,通常是因为 VBA 代码试图使用一个尚未被正确初始化(即未通过 Set 语句赋值)的对象变量,或该对象已被设为 Nothing。
常见原因与解决方法
对象变量未初始化
使用 Set 语句为对象变量分配有效引用。例如:vb
Dim swApp As SldWorks.SldWorks
Set swApp = Application.SldWorks ' 必须有这行!
对象已被释放但仍被引用
若代码中执行过 Set swModel = Nothing,后续再调用 swModel 方法就会报错。应避免重复释放或在释放后继续使用。
中文版 SW 中基准面名称不匹配
在中文版 SolidWorks 中,基准面名称如“前视基准面”“上视基准面”,而代码若写成英文(如 "front" 或 "top"),会因找不到对应对象而失败。
正确示例:vb
boolstatus = swModel.Extension.SelectByID2("上视基准面", "PLANE", 0, 0, 0, False, 0, Nothing, 0)
未引用或引用错误的对象库
确保在 VBA 编辑器中已添加对 SolidWorks 类型库 的引用:工具 → 引用 → 勾选 “SldWorks Type Library”。
宏操作前未打开零件/装配体
若 swApp.ActiveDoc 为 Nothing(即无文档打开),直接调用其方法会出错。应先检查:vb
If swModel Is Nothing Then
swApp.SendMsgToUser2 "请打开一个零件或装配体。", swMbStop, swMbOk
Exit Sub
End If
默认模板未设置(影响某些插件宏)
打开 SW → 工具 → 选项 → 系统选项 → 默认模板,指定零件和装配体模板。
调试建议
启用断点调试:在 VBA 编辑器中按 F8 单步执行,观察在哪一行报错。
检查变量值:将鼠标悬停在变量上,查看是否为 Nothing。
查看 Immediate 窗口:按 Ctrl+G 查看调试输出,确认对象是否成功创建。
参考资料
Microsoft Learn:未设置对象变量(错误 91)
CSDN:SW 宏错误 91 解决案例
腾讯云:错误 91 常见场景分析
如能提供具体报错代码行,可进一步精准定位问题。