核心功能:本脚本通过Excel表格中的数据,批量、自动修改SolidWorks零件的特定尺寸,并导出为指定名称和格式的模型文件。
(这个脚本在多个仿真项目中被复用,愈发觉得熟悉二次开发后自己制作一些脚本可以省不少时间,现整理到公众号上方便同行参考学习。)
下图展示了脚本运行的完整流程:

在运行脚本前,请确保满足以下所有条件:


D1@Sketch1)。可以在SolidWorks中双击尺寸,在左侧属性管理器查看其全名。
Alt + F11 打开VBA编辑器。模块1)。
Option Explicit‘ 本脚本用于批量修改SolidWorks模型尺寸并自动保存Sub Creating_Modeling() '声明变量 Dim ws As Worksheet Dim row_count As Long, row_index As Long Dim bool As Boolean '指定参数所在的工作表(这里设为第一个工作表) Set ws = ThisWorkbook.Worksheets(1) '动态获取A列最后一行有数据的行号 row_count = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row '从第2行开始循环(第1行假定为标题行) For row_index = 2 To row_count '调用核心函数,传入当前行的三个参数 '参数顺序对应A、B、C列 bool = Setting_model(ws.Range("A" & row_index).Value2, _ ws.Range("B" & row_index).Value2, _ ws.Range("C" & row_index).Value2) Next row_index MsgBox "所有模型已生成完毕!", vbInformationEnd SubFunction Setting_model(ARG1 As Double, ARG2 As Double, ARG3 As Double) As Boolean '声明SolidWorks API核心对象 Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swDimension_D1 As SldWorks.Dimension Dim swDimension_D2 As SldWorks.Dimension Dim swDimension_D3 As SldWorks.Dimension Dim SAVE_Filename As String Dim TemplatePath As String Dim SaveFolder As String On Error GoTo ErrorHandler '错误处理 '============ 【**重点修改区域 START**】============ '1. 指定SolidWorks基座模板文件路径 TemplatePath = "C:\Users\Name\Desktop\Template_Model.SLDPRT" '2. 指定生成文件的保存目录 SaveFolder = "C:\Users\Name\Desktop\Model_Output\" '3. 确认模板中尺寸的名称(须完全匹配) Dim D1_Name As String: D1_Name = "D1@Sketch2" '对应参数 ARG1 Dim D2_Name As String: D2_Name = "D2@Sketch2" '对应参数 ARG2 Dim D3_Name As String: D3_Name = "D3@Sketch2" '对应参数 ARG3 '============ 【**重点修改区域 END**】============ '连接到正在运行的SolidWorks实例 Set swApp = GetObject(, "SldWorks.Application") '以"只读"模式打开模板文件,避免意外更改原文件 Set swModel = swApp.OpenDoc(TemplatePath, 1) '1 代表零件文档 '获取模型中指定的尺寸对象 Set swDimension_D1 = swModel.Parameter(D1_Name) Set swDimension_D2 = swModel.Parameter(D2_Name) Set swDimension_D3 = swModel.Parameter(D3_Name) '将Excel传入的参数值赋予对应尺寸 swDimension_D1.Value = ARG1 swDimension_D2.Value = ARG2 swDimension_D3.Value = ARG3 '强制模型根据新尺寸重新计算(重建) swModel.ForceRebuild3 (True) '构造新文件名,格式示例:BackBlade_Q2_10_20_5.xxx Dim BaseName As String BaseName = "BackBlade_" & "Q2_" & ARG1 & "_" & ARG2 & "_" & ARG3 '保存为.x_t(Parasolid)通用格式 SAVE_Filename = SaveFolder & BaseName & ".x_t" swModel.SaveAs SAVE_Filename '保存为.sldprt(SolidWorks原生)格式 SAVE_Filename = SaveFolder & BaseName & ".sldprt" swModel.SaveAs SAVE_Filename '关闭当前文档,不保存对原始模板的更改 swApp.CloseAllDocuments False Setting_model = True '函数执行成功 Exit FunctionErrorHandler: MsgBox "运行过程中发生错误,请检查:" & vbCrLf & _ "1. SolidWorks是否已启动。" & vbCrLf & _ "2. 文件路径和尺寸名称是否正确。" & vbCrLf & _ "错误号:" & Err.Number & ", 描述:" & Err.Description, vbCritical Setting_model = FalseEnd Function须修改代码中 【**重点修改区域**】 标记的部分:
TemplatePath:将字符串替换为SolidWorks模板文件的真实完整路径。SaveFolder:将字符串替换为输出文件的文件夹路径,路径末尾需有反斜杠\。D1_Name, D2_Name, D3_Name 变量值必须与模板模型中尺寸的完整名称完全一致。
Alt + F8 打开宏对话框,选择 Creating_Modeling 宏,点击“运行”。

理解以下三个API对象,有助于你进一步调试和扩展脚本:
(若这里内容你感到陌生,可以先参阅SolidWorks二次开发 I:基于VBSolidWorks二次开发 II:基于VB如何快速上手VBA?[AI新时代解法]VBA面向对象编程)
SldWorks.SldWorks (代码中为 swApp)GetObject(连接软件)、OpenDoc(打开文件)、CloseAllDocuments(关闭所有文件)。SldWorks.ModelDoc2 (代码中为 swModel).Parameter(获取尺寸)、.ForceRebuild3(重建模型)、.SaveAs(另存为)。SldWorks.Dimension (代码中为 swDimension_xxx).Value 可以直接设置或获取这个尺寸的数值。三者的关系链:SldWorks (应用程序) -> 打开/控制SW -> ModelDoc2 (具体的图纸/文件) -> 打开模型 -> Dimension (可修改尺寸) ->修改尺寸/另存文件。