阅读本文,带你探索 SOLIDWORKS 中全新的自动化实现方式。
解读 SOLIDWORKS 事件、互操作性及文档管理器对宏程序的赋能
很多使用者都曾借助 SOLIDWORKS 内置的 VB 编辑器录制宏程序,期望后续直接调用运行。但并非所有 SOLIDWORKS 操作命令都支持录制。也有部分使用者参考网络上大量教程、论坛案例与示例代码,从零手动编写宏程序。
如果你属于上述两类人群,或是单纯想要了解 VB 编辑器的拓展用法,本文将介绍两组多数使用者并不熟知的核心概念。掌握这些内容,将彻底打开 SOLIDWORKS 自动化的全新大门,它们分别是:SOLIDWORKS 事件、互操作性,以及后续讲解的SOLIDWORKS 文档管理器。
我们首先从 SOLIDWORKS 应用程序编程接口(API)文档中被称作委托的事件开始讲解。
一、什么是 SOLIDWORKS 事件
顾名思义,事件指 SOLIDWORKS 软件运行过程中触发的特定节点或操作行为,API 可以对这些行为进行监听。常见示例包括:打开文档、修改自定义属性、在界面中选中任意对象。
打开文档、修改自定义属性、界面选中操作,这些行为在软件内部均被定义为事件,开发者可通过代码让 API 对各类事件做出响应。
本文旨在帮助大家理解以下内容:
事件的基本定义;
事件的监听方法;
事件的实际运用方式,让自动化程序不再局限于点击按钮触发,还能主动响应使用者在 SOLIDWORKS 内的各类操作。
本文不会编写完整可落地的宏程序,仅通过代码片段演示整体运行逻辑。
二、在本地 API 帮助文档中查看事件
打开随 SOLIDWORKS 一同安装的本地 API 帮助文档。


在 API 帮助文档的内容目录中,可以找到委托节点,该节点罗列了当前 SOLIDWORKS 版本支持的全部事件。
我们可将事件按照应用对象分为以下类别:
1、应用程序事件:DSldWorksEvents
2、装配文档事件:DAssemblyDocEvents
3、工程图文档事件:DDrawingDocEvents
4、零件文档事件:DPartDocEvents
5、特征管理器视图事件:DFeatMgrViewEvents
6、模型视图事件:DModelViewEvents
7、鼠标事件:DMouseEvents
8、属性面板事件:DSWPropertySheetEvents
9、任务窗格事件:DTaskpaneViewEvents
我日常使用最多的是与当前活动文档绑定的事件,建议大家逐一查阅所有事件,绝大多数事件都配有详尽的功能说明与文档注释。

重要细节:所有委托均无法被手动调用。委托由 SOLIDWORKS 内部触发,当对应事件发生时,软件会自动携带参数执行委托对应的程序。
三、编写响应选中事件的宏程序
接下来演示如何监听 SOLIDWORKS 界面内的选中操作。我们在 VB 编辑器中新建宏程序,分步操作如下:

步骤 1:整理默认模块并重命名
对软件自动生成的默认模块进行整理。为便于区分,建议按照统一规则命名模块,格式参考:S01_名称、S02_名称……
该命名方式可按照执行顺序对模块排序。
步骤 2:对 SOLIDWORKS 应用对象进行强类型声明
编辑器默认会将应用对象swApp声明为通用对象类型。我们需要替换为显式指定类型:
Dim swApp As SldWorks
该操作用于启用前期绑定,编辑器将激活智能感知功能,大幅降低方法与属性的查阅难度。
代码对比:后期绑定与前期绑定


步骤 3:新建类模块用于处理事件
右键【模块】→【插入】→【类模块】。

为类模块设置易识别的名称,示例名称:SolidEvents_Handler。

在类模块中使用WithEvents关键字,声明需要监听的应用对象、零件对象、装配对象、工程图对象:
额外新增ModelDoc2类型变量,用于捕获当前处于激活状态的文档:

Dim swModel As SldWorks.ModelDoc2
步骤 4:初始化类模块
选中对象下拉栏中的【类】、过程下拉栏中的【初始化】,创建Class_Initialize(类初始化)过程。
在初始化过程中完成核心变量的绑定:

通过swModel.GetType方法判断当前文档类型,该方法的返回值为整型,对应 API 帮助文档中的枚举表。
IModelDoc2 接口 — GetType 方法
.NET 语法
Visual Basic 声明:Function GetType () As System.Integer
C# 语法:System.int GetType ();
C++/CLI 语法:System.int GetType ();
备注:请参考非托管 C++ 与 C++/CLI 代码的差异说明。
返回值:文档类型,对应枚举swDocumentTypes_e。
文档类型枚举(swDocumentTypes_e)



初始化后,你可以开始捕获事件

代码说明:以上代码是 99% 宏程序的基础,可避免因文档类型不匹配调用错误方法、属性,从而导致宏程序启动崩溃。若仅需让宏在零件文档中运行,可在装配、工程图的判断分支中添加Exit Sub语句,也可弹出提示框告知使用者。
步骤 5:捕获选中事件
本次演示使用用户完成选择后通知事件(UserSelectionPostNotify),该事件会在使用者每一次完成界面选中操作后触发。

选中事件代码实现
调用 ** 选择管理器(SelectionManager)** 的GetSelectedObjectType3方法,该方法的返回值为长整型,对应选中类型枚举表。



运行测试
在标准模块中声明类对象,编写入口主程序:
新建零件文件并创建模型,运行main主程序;
按下快捷键Ctrl+G调出立即窗口,查看选中对象对应的编码。
运行结果示例
依次选中尺寸、面、实体特征、基准面后,立即窗口输出编码:14、2、22、4,与枚举表完全对应。


你可以不断选择任何东西,从计数器那里查看它的长值
即时窗口显示的每个选区都有一个数字

API Help是这么说的:

基于该编码,你可以编写逻辑代码,针对性响应指定类型的选中对象。本案例中,我们将以尺寸和实体特征为例,实现外部控制逻辑。
四、互操作性:SOLIDWORKS 与 Excel 通信
本节讲解互操作性,以及组件对象模型(COM)的运行原理。
COM 全称组件对象模型,依托类型库文件(.tlb)实现不同应用程序之间的通信。借助 COM 技术,SOLIDWORKS 与 Excel 可以实现双向数据互通。
4.1 第一部分:SOLIDWORKS 调用 Excel
在 SOLIDWORKS 的 VB 编辑器中启用 Excel 引用,操作路径:【工具】→【引用】,勾选对应版本的Microsoft Excel 对象库。


添加引用后,即可在宏程序中调用 Excel 的所有对象、方法与属性,用法与 Excel 原生 VBA 完全一致。
案例需求
编写宏程序,将 SOLIDWORKS 中选中的尺寸、特征信息录入 Excel 表格:
若 Excel 未启动,自动新建 Excel 进程;
在工作表 1 中创建三列表格;
弹出无模态窗体维持程序连接;
窗体显示期间,SOLIDWORKS 内选中的指定对象会自动在 Excel 新增行;
关闭窗体时,释放所有 COM 对象指针,避免产生内存悬空引用。


补充说明
Excel 文件格式为.xlsm(启用宏的 Excel 工作簿);
B2 单元格记录当前关联的 SOLIDWORKS 零件完整路径;
完成数据采集后可直接保存 Excel 文件。
4.2 第二部分:Excel 调用 SOLIDWORKS
我们可以反向操作,通过 Excel 驱动 SOLIDWORKS,并结合 Excel 事件实现联动。
打开 Excel,启用【开发工具】选项卡(操作:Excel 选项→自定义功能区→勾选开发工具);

通过开发工具选项卡打开 Excel VB 编辑器。

Excel VB 编辑器与 SOLIDWORKS VB 编辑器存在界面差异:首次打开会显示当前工作簿对象与所有工作表对象,工作表支持单元格变更等内置事件。

实现架构
沿用 SOLIDWORKS 宏的架构:
标准模块:作为程序入口;
类模块:捕获 Excel 内置事件;
窗体:维持程序通信连接。

操作步骤
将 SOLIDWORKS 端的窗体文件直接拖拽至 Excel VBA 项目中,复用窗体;
在 Excel VBA 引用列表中,添加以下库文件:
SldWorks 2025 类型库
SOLIDWORKS 2025 常量类型库
SwDocumentMgr 2025 类型库

编写代码建立通信,通过 Excel 单元格变更事件,修改 SOLIDWORKS 模型的尺寸与特征状态。

4.3 第三部分:借助文档管理器实现 Excel 调用 SOLIDWORKS
上述双向通信均需要保持 SOLIDWORKS 程序处于运行状态。而SOLIDWORKS 文档管理器是一套独立 API,无需启动 SOLIDWORKS 主程序,甚至不需要 SOLIDWORKS 软件许可,即可实现 SOLIDWORKS 文件的读写、参考修改、物料清单提取等操作。

本案例目标:使用 Excel 搭建配置器,通过参数驱动 SOLIDWORKS 三维模型。前置准备:SOLIDWORKS 模型参数化
在 SOLIDWORKS 中为尺寸绑定方程式,关联自定义属性(界面中 Σ 符号代表方程式驱动尺寸)。编写规则:在尺寸栏输入=+ 自定义属性名称,即可将尺寸与自定义属性绑定。
核心优势:借助文档管理器,无需打开 SOLIDWORKS,即可读写自定义属性,间接修改模型尺寸。

然后,利用文档管理器 API 帮助,我们可以看到一个示例来使用它。

正如我们所见,我们需要的唯一参数是许可证密钥,我建议将其放在一个分开的文件中,然后读取它,而不是在 vba 项目中写完整个密钥。
下一步是通过文档管理器打开文件。

在获得我们想要的文档后,也就是Excel文件中路径的那个,我们修改了它的自定义属性。

最后一步是保存文件。

最终实现方案
在 Excel 单元格录入参数:高度、深度、宽度、厚度、是否带窗口;
文档管理器读取 Excel 参数,调用SetCustomProperty2修改 SOLIDWORKS 文件的自定义属性;
调用Save方法保存文件;
使用者在 SOLIDWORKS 中打开文件并重建模型,即可完成参数更新。
该方案可用于搭建产品报价配置器、参数化三维模型生成器。

部分文章来源网络或用户投稿,如有侵权请联系本站删除!
获取SW正版免费试用,有任何疑问咨询热线:400-886-6353或 联系在线客服
未解决你的问题?请到「问答社区」反馈你遇到的问题,专业工程师为您解答!