Solidworks VBA中swApp声明为Object与sldworks.sldworks的区别及报错问题
SolidWorks VBA在Excel中运行报错:运行时错误'438'的解决方法
错误核心原因
在Excel VBA环境里,Application指的是Excel自身的应用程序对象,而非SolidWorks的应用对象。你写的Set swApp = Application.Sldworks本质是在调用Excel Application的Sldworks属性,但Excel根本没有这个属性,所以触发运行时错误'438'。
而SolidWorks内部宏里的Application是SolidWorks自身的应用对象,所以宏里的写法能正常运行,两者的上下文完全不同。
解决方法
方法1:早期绑定(需已添加SolidWorks引用)
既然你已经添加了对应版本的SolidWorks对象库引用,直接通过创建/获取SolidWorks实例来初始化对象:
Dim swApp As SldWorks.SldWorks ' 启动新的SolidWorks实例 Set swApp = CreateObject("SldWorks.Application") ' 或者连接已打开的SolidWorks实例(推荐优先用这个) ' Set swApp = GetObject(, "SldWorks.Application")
早期绑定的优势是编写代码时有自动提示,类型检查更严格。
方法2:晚期绑定(无需添加引用,兼容性更强)
这就是SolidWorks宏默认采用的写法,适合跨版本场景:
Dim swApp As Object ' 启动新实例 Set swApp = CreateObject("SldWorks.Application") ' 连接已打开的实例 ' Set swApp = GetObject(, "SldWorks.Application")
关于示例写法的困惑
多数示例里的Dim swApp As SldWorks.SldWorks写法,都是针对SolidWorks内部宏或者独立VBA工程的场景:
- 在SolidWorks宏里,
Application本身就是SolidWorks的应用对象,所以可以直接用早期绑定; - 独立VBA工程里,代码直接操作SolidWorks对象,不需要依赖Excel的Application上下文,因此写法有效。
但到了Excel这种外部VBA环境,必须明确创建/获取SolidWorks的应用实例,不能直接套用内部宏的写法。
内容的提问来源于stack exchange,提问作者SML
相关产品推荐
相关产品推荐

