如何在VBA中为SolidWorks零件设置独立REV码并批量保存
实现每个选中零件对应独立REV码的方案
核心思路
利用控件命名的关联性配对CheckBox和对应的REV文本框:给每个零件的CheckBox命名为chkPart{n}(n为序号,如chkPart1、chkPart2),对应旁侧的REV文本框命名为txtREV{n},通过提取控件名称中的序号实现一一绑定。
具体实现步骤
1. 规范UserForm控件命名
- 零件选择CheckBox命名规则:
chkPart1、chkPart2、chkPart3... - 对应REV文本框命名规则:
txtREV1、txtREV2、txtREV3...
2. 修改主程序代码
遍历UserForm内的CheckBox,判断选中状态后,通过名称序号匹配对应TextBox,获取独立REV码并执行零件保存:
Sub BatchSavePartsWithUniqueREV() Dim swApp As SldWorks.SldWorks Dim swModel As SldWorks.ModelDoc2 Dim swAssy As SldWorks.AssemblyDoc Dim swComp As SldWorks.Component2 Dim chkBox As MSForms.CheckBox Dim txtBox As MSForms.TextBox Dim partIndex As Integer Dim revCode As String Set swApp = Application.SldWorks Set swModel = swApp.ActiveDoc Set swAssy = swModel '遍历所有CheckBox控件 For Each chkBox In UserForm1.Controls If TypeName(chkBox) = "CheckBox" And chkBox.Value = True Then '提取名称中的序号(从chkPart{n}中分离n) partIndex = Val(Right(chkBox.Name, Len(chkBox.Name) - 7)) '7是"chkPart"的字符长度 '匹配对应REV文本框 Set txtBox = UserForm1.Controls("txtREV" & partIndex) revCode = Trim(txtBox.Text) '获取选中的零件组件 Set swComp = swAssy.GetComponentByName(chkBox.Caption) Set swModel = swComp.GetModelDoc2 '执行带独立REV的保存逻辑(按需修改) If Not swModel Is Nothing Then '示例:写入REV自定义属性并保存 swModel.Extension.SetCustomPropertyValue "", "REV", revCode swModel.SaveAs2 swModel.GetPathName(), swSaveAsVersion_e.swSaveAsCurrentVersion, swSaveAsOptions_e.swSaveAsOptions_Silent, Nothing End If End If Next chkBox MsgBox "批量保存完成" End Sub
3. 优化建议
- 若零件数量动态变化,可在UserForm加载时,根据装配体零件数自动生成CheckBox和TextBox,并按规则命名。
- 给TextBox添加输入验证(如限制为字母数字),避免无效REV码输入。
内容的提问来源于stack exchange,提问作者JetskiS
相关产品推荐
相关产品推荐

