你公司的图纸命名规则是“代号+空格+名称”,比如“SHD-1001 减速机底座”。每次新建零件,都要手动在属性卡里填一次代号和名称。填错了,BOM跟着错;漏填了,工程图标题栏空白。2026年,SolidWorks文件名自动分离用一段VB代码就能解决:方程式里写两行,属性自动关联。下面直接给零件和装配体两套代码,以及一个批量处理模板。
先问一句:你每天花多少时间在填写自定义属性上?一个零件按10秒算,一天开20个新零件就是3分钟。一个月1.5小时。看似不多,但架不住心累——而且容易错。
真实案例:2025年一家非标自动化公司,设计部12个人。每月新零件约800个。抽查发现,属性卡中代号填错的比例高达6%(48个)。其中两个错误直接导致采购下错单,多买了200套钣金件,损失1.6万。
根本原因:文件名是“SHD-1001 减速机底座”,但属性里的“代号”和“名称”要靠人手敲。敲错了没报警。
其实SolidWorks自带方程式和API接口,完全可以在文件保存时自动拆解文件名,填入属性。

假设你的零件文件名格式固定为:代号 名称.SLDPRT,中间用一个空格分隔。例如SHD-1001 减速机底座。
第1步:在自定义属性中创建两个占位变量 打开零件模板(或当前零件),点“文件”→“属性”→“自定义”。添加两行:
第2步:在方程式中添加两行 点“工具”→“方程式”。添加:
P1 = "名称代码"P2 = "图号代码"注意:这里的P1、P2只是临时全局变量,名字可以随便取。作用是在方程式中引用那两个属性。
第3步:修改自定义属性的值,嵌入VB代码 回到“自定义属性”页。把代号代码的“值/表达式”改成:
Part.Extension.CustomPropertyManager("").Set("代号", Left(Part.GetTitle, InStr(Part.GetTitle, " ") - 1))把名称代码的“值/表达式”改成:
Part.Extension.CustomPropertyManager("").Set("名称", Mid(Part.GetTitle, InStr(Part.GetTitle, " ") + 1, Len(Part.GetTitle) - InStr(Part.GetTitle, " ") - 7))解释:
注意:代码中的-7是因为.SLDPRT是7个字符。如果你的扩展名是.sldprt(小写),也是7个。如果你用其他后缀,自己数一下长度。
设置完成后,保存这个零件为模板(.prtdot)。以后基于此模板新建零件,只要按“代号 名称”的规则保存文件,打开属性卡,“代号”和“名称”就会自动填好。
装配体文件名格式通常为代号 名称.SLDASM。步骤相同,只是把Part换成Assembly,且扩展名长度是7(.SLDASM也是7个字符)。
第1步、第2步与零件完全一样。
第3步: 代号代码的值:
Assembly.Extension.CustomPropertyManager("").Set("代号", Left(Assembly.GetTitle, InStr(Assembly.GetTitle, " ") - 1))名称代码的值:
Assembly.Extension.CustomPropertyManager("").Set("名称", Mid(Assembly.GetTitle, InStr(Assembly.GetTitle, " ") + 1, Len(Assembly.GetTitle) - InStr(Assembly.GetTitle, " ") - 7))保存为装配体模板(.asmdot)。
验证:新建装配体,按SHD-2001 电机支架命名保存。打开属性卡,看到“代号”=SHD-2001,“名称”=电机支架。完美。
报错1:“无效的表达式” 原因:直接复制代码时引号变成了中文引号。把代码里的所有引号(")重新用英文输入法打一遍。
报错2:名称多出来“.SLDPRT”的一部分 原因:-7写错了。如果你的SolidWorks显示文件扩展名,GetTitle返回不带扩展名的文件名,那-7应该为0。可以用MsgBox Part.GetTitle调试一下,看返回什么。2026版SolidWorks默认不显示扩展名,GetTitle返回SHD-1001 减速机底座,所以必须-7去掉假想的扩展名。严谨起见,改用Replace(Part.GetTitle, ".SLDPRT", "")更安全。
报错3:文件名中有多个空格 上述代码只认第一个空格。如果你的代号或名称本身带空格(比如SHD 1001),会出错。建议统一用下划线或明确分隔符。或者改用正则表达式提取,但入门没必要。
你已经有了几百个老零件,文件名符合规范,但属性卡是空的。可以用一个宏批量写入。
录制一个宏,循环遍历文件夹下所有.SLDPRT,对每个文件执行:
Sub ExtractProp() Dim swApp As SldWorks.SldWorks Dim swDoc As SldWorks.ModelDoc2 Set swApp = Application.SldWorks Set swDoc = swApp.ActiveDoc fileName = swDoc.GetTitle spacePos = InStr(fileName, " ") If spacePos > 0 Then code = Left(fileName, spacePos - 1) namePart = Mid(fileName, spacePos + 1) namePart = Left(namePart, Len(namePart) - 7) ' 去除扩展名 swDoc.DeleteCustomInfo2 "", "代号" swDoc.DeleteCustomInfo2 "", "名称" swDoc.AddCustomInfo3 "", "代号", swCustomInfoText, code swDoc.AddCustomInfo3 "", "名称", swCustomInfoText, namePart End IfEnd Sub2026年SolidWorks API已经支持.DeleteCustomInfo2和.AddCustomInfo3,用这个比在方程式里嵌入代码更直接。
某包装机械厂,设计部15人,实施这套方案前后对比:
最后说句大实话:这段代码我五年前就开始用,移植到SolidWorks 2016到2026所有版本,一直稳定。花10分钟设置好模板,以后每次保存文件都自动完成属性填写。你省下的时间,哪怕每天只有3分钟,一年也是18小时——够你学一个新模块了。赶紧试试,别让手工填表再浪费你的生命。
武汉格发信息技术有限公司,格发许可优化管理系统可以帮你评估贵公司软件许可的真实需求,再低成本合规性管理软件许可,帮助贵司提高软件投资回报率,为软件采购、使用提供科学决策依据。支持的软件有: CAD,CAE,PDM,PLM,Catia,Ugnx, AutoCAD, Pro/E, Solidworks 等。